Parser le contenu d'un Textarea

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Parser le contenu d'un Textarea

Re: Parser le contenu d'un Textarea

par Castor Gaspard » 18 avr. 2011, 19:37

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

Parser le contenu d'un Textarea

par Castor Gaspard » 17 avr. 2011, 19:53

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