8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai créé un système de bb-code sur mon site afin que les internautes puisse publier des articles.

Je récupère l'article de l'internaute en $_post et le parse pour remplacer les balises bb_code en balise html. Jusque la j'ai réussi et ca ressemble à ca :


$texte = nl2br($texte); // On crée des <br /> pour conserver les retours à la ligne
$texte = preg_replace('#\[b\](.+)\[/b\]#isU', '<strong>$1</strong>', $texte); // Met en gras
$texte = preg_replace('#\[i\](.+)\[/i\]#isU', '<em>$1</em>', $texte);  // Met en italique
$texte = preg_replace('#\[u\](.+)\[/u\]#isU', '<span style="text-decoration:underline;">$1</span>', $texte);  // souligne un texte
....   
return $texte;


Ensuite je récupére mon texte avec les balises html et il y a des choses que je n'aime pas trop , mais que je ne parviens pas à modifier. Exemple


<p></p><h2>Un titre</h2>


ou encore:


du texte du texte du texte.<br />
<br />
du texte du texte du texte.


Je n'arrive pas à faire mes regex pour modifier mes balises html.
Dans le premier exemple je voudrais remplacer
<p></p>
par rien , puisque c'est un paragraphe vide (donc les supprimer).

Dans le deuxième exemple je voudrais remplacer
<br /><br />
par
<p></p>
puisque lorsqu'il y a deux saut de lignes c'est en général un nouveau paragraphe qui commence.

j'ai essayé ceci qui ne marche pas

$texte = preg_replace('#\<p\>\<\/p\>#isU', '', $texte); // supprime les paragraphes inutile
$texte = preg_replace('#\<br \\>(.+)\<br \\>#isU', '<p>', $texte); // cree un nouveau paragraphe quand il y a deux sauts de lignes.


Je pense que mon problème viens des \ devant les métacartéres en particulier < et >, mais je ne trouve pas la solution.

Quelqu'un peut-il m'aider.
Modifié par yann123 (13 May 2008 - 00:38)

$texte = preg_replace('#<p><\/p>#isU', '', $texte);  // j'élimine les paragraphe vide
$texte = preg_replace('#<br \/>([^<]*)<br \/>#isU', '</p><p>', $texte);  // Je crée un nouveau paragraphe quand il y a deux br à suivre


J'ai résolu mon problème tous seul comme un grand Smiley biggrin

Je poste la réponse a ma question , cela peut servir à d'autre.

Il me reste un léger soucis que vous saurez peut-être résoudre.

Tous marche très bien et ma page s'affiche correctement également, par contre quand j'affiche la source de ma page mon code html s'affiche sur de très longue ligne.

comment pourrais-je faire pour avoir une mise en page correct de mon code source

actuellement:

<p>du texte</p><ul><li>du texte</li><li>encore du texte</li><li>toujours du texte</li></ul><p>du texte</p>


J'aimerais:

<p>
du texte
</p>
<ul>
<li>du texte</li>
<li>encore du texte</li>
<li>toujours du texte</li>
</ul>
<p>
du texte
</p>


Plus comprehensible quoi, je répéte que ma page s'affiche trés bien c'est juste mon code-source qui est comme cela.
Pour insérer des retours à la ligne dans ton code il faut utiliser le caractère spécial "\n". Par exemple :
echo '<p>un paragraphe</p>'."\n".'<p>un autre paragraphe précédé d'un retour à la ligne dans le code</p>';