Parser le contenu d'un Textarea
Posté : 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...
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...
Résultat A
D'habitude, je me sors bien des str_replace !
Merci beaucoup.
Gaspard
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. D'habitude, je me sors bien des str_replace !
Merci beaucoup.
Gaspard