Page 1 sur 1

Parser le contenu d'un Textarea

Posté : 17 avr. 2011, 19:53
par Castor Gaspard
Bonjour,

Voilà, je viens de créer une zone de texte riche, qui permet à l'utilisateur d'agrémenter sa saisie de gras ou d'italique et de composer des listes.

Or, je voudrai, lors du traitement, retourner une chaîne formée correctement en Html.

Ainsi, chaque retour à la ligne (en appuyant sur le touche "Entrée" du clavier) doit être analysée comme un nouveau paragraphe.

J'essaie donc la saisie suivante dans ma zone...
Bonjour.
J'ai envoyé le message à :
<ul>
<li>Adam,</li
<li>Eve.</li>
</ul>
Merci de le noter.
Pour traiter ma chaîne $_POST['rte']...
1. J'applique nl2br (la recherche des \r et les \n me semble avoir un comportement imprévisible !) à chaque saut de ligne ;
2. Ensuite, je supprime les sauts de ligne qui se sont mis avant ou après <ul> et <li> ;
3 Je remplace les sauts de ligne *restants* par des marques de paragraphe.

Voici la syntaxe utilisée...
$_POST['rte'] = nl2br($_POST['rte'], true); // Résultat A
$source_rte = array('<ul><br />', '</ul><br />', '</li><br />');
$target_rte = array('<ul>', '</ul>', '</li>');
$_POST['rte'] = str_replace($source_rte, $target_rte, $_POST['rte']); // Résultat B
$_POST['rte']  = '<p>' . str_replace('<br />', '</p><p>', $_POST['rte'] ) . '</p>'; // Résultat C
echo $_POST['rte'];
Or, lors du traitement de la dernière ligne, des </p><p> sont rajoutés bizarrement. :(

Résultat A
Bonjour.<br>
J'ai envoyé le message à :<br>
<ul><br>
<li>Adam,</li><br>
<li>Eve.</li><br>
</ul><br>
Merci de le noter.
Résultat B
Bonjour.<br>
J'ai envoyé le message à :<br>
<ul>
<li>Adam,</li>
<li>Eve.</li>
</ul>
Merci de le noter.
Résultat C
<p>Bonjour.</p><p>
J'ai envoyé le message à :</p><p>
</p><ul>
<li>Adam,</li>
<li>Eve.</li>
</ul>
Merci de le noter.<p></p>
Si je simplifie ma dernière ligne avec
$_POST['rte'] = str_replace('<br />', '</p><p>', $_POST['rte']);
le résultat est mieux, mais ajoute un paragraphe vide et ne met pas le dernier...
Bonjour.<p></p><p>
J'ai envoyé le message à :</p><p>
</p><ul>
<li>Adam,</li>
<li>Eve.</li>
</ul>
Merci de le noter.
Si vous avez des idées, je suis preneur. :mrgreen:

D'habitude, je me sors bien des str_replace !

Merci beaucoup.

Gaspard

Re: Parser le contenu d'un Textarea

Posté : 18 avr. 2011, 19:37
par Castor Gaspard
Bonjour,

Bon, j'ai résolu mon problème avec un outil que je vous recommande chaudement : HTML Purifier, http://htmlpurifier.org/.

La librairie est certes lourde, mais rend de grands services. :mrgreen:

Merci de votre attention. :)

Cordialement,

Gaspard