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.
D'habitude, je me sors bien des
str_replace !
Merci beaucoup.
Gaspard