[PHP] BBCode vers html problème avec <br>

BBCode vers html problème avec <br> [PHP] - PHP - Programmation

Marsh Posté le 18-08-2004 à 20:57:13    

Bonjour,
 
J'ai fait un script pour transformer du BBCode vers html.
Mais il me reste un problème à régler : comment faire pour que les "à la ligne" soient transformer en <br> ??
 
Merci
 
extrait du script :

Code :
  1. $msg = preg_replace("/(\[b\])(.*?)(\[\/b\])/si", "<b>\\2</b>", $msg);

Reply

Marsh Posté le 18-08-2004 à 20:57:13   

Reply

Marsh Posté le 18-08-2004 à 20:57:54    

nl2br()


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-08-2004 à 21:06:03    

Merci mais ke dois-je en faire ?
désolé je suis pas très callé en php...

Reply

Marsh Posté le 18-08-2004 à 21:38:19    

Code :
  1. $nl2br_msg = nl2br($msg);
  2. echo '<p>';
  3. echo 'avant nl2br() :<br />';
  4. echo $msg;
  5. echo '</p>';
  6. echo '<p>';
  7. echo 'après nl2br() :<br />';
  8. echo $nl2br_msg;
  9. echo '</p>';


Message édité par simogeo le 18-08-2004 à 21:56:18

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-08-2004 à 22:48:57    

ou quelque chose comme ca :
$msg=preg_replace("/\n/",'<br/>',$msg);

Reply

Marsh Posté le 18-08-2004 à 23:09:34    

MrFredG a écrit :

ou quelque chose comme ca :
$msg=preg_replace("/\n/",'<br/>',$msg);

C'est la meilleure soluution pour l'intégrer en continuité du reste.


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
Reply

Marsh Posté le 18-08-2004 à 23:11:53    

.... vraiment n'importe quoi [:kiki]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-08-2004 à 23:17:34    

en utilisant preg_replace sur des array() ca devient intéressant et clair. Or c 'est généralement le cas quand on traite du bbcode.
 

Reply

Marsh Posté le 18-08-2004 à 23:22:07    

les regexs sont super gourmandes en terme de ressource! C'est complétement stupide de le traiter avec des regex alors qu'une fonction simple et optimisée est dédiée à ce traitement....


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-08-2004 à 23:28:53    

sauf qu'on traite tout avec une seule instruction dans ce cas la.

Reply

Marsh Posté le 18-08-2004 à 23:28:53   

Reply

Marsh Posté le 19-08-2004 à 00:12:37    

simogeo a écrit :

les regexs sont super gourmandes en terme de ressource! C'est complétement stupide de le traiter avec des regex alors qu'une fonction simple et optimisée est dédiée à ce traitement....

Apparement tu ignore comment un certain nombre de forums (dont celui-ci d'ailleurs) font par afficher tes posts ...


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
Reply

Marsh Posté le 20-08-2004 à 11:32:49    

J'ai une petite question en rapport avec le bbcode moi aussi :)
Je voudrais savoir en fait comment on fait, au niveau des boutons, pour que quand on clique une fois sur un bouton il insère [*img] et quand on rappuie il insère [*/img].

Reply

Marsh Posté le 20-08-2004 à 12:29:07    

simogeo a écrit :

les regexs sont super gourmandes en terme de ressource! C'est complétement stupide de le traiter avec des regex alors qu'une fonction simple et optimisée est dédiée à ce traitement....


 
en php je sais pas, mais en perl, les regexp c pas mal dans squia de plus performant pour faire ce genre de truc


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 20-08-2004 à 13:38:52    

En attendant un str_replace est toujours plus rapide qu'une regexp :o

Reply

Marsh Posté le 20-08-2004 à 15:43:51    

Gilbert Gosseyn a écrit :

Apparement tu ignore comment un certain nombre de forums (dont celui-ci d'ailleurs) font par afficher tes posts ...


 
[:kiki]
Oui les regex sont indispensables pour l'ubb code ... mais pour transformer les saut de ligne en <br /> faut vraiment être manche pour le coder de la sorte [:boidleau]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 20-08-2004 à 16:21:25    

[troll]t'es sur un JoceForum ca te suffit pas?[:rofl][/troll]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-08-2004 à 16:59:44    

nl2br bordel :o
ptain vous avez une fonction spécialisée pour le faire et vous la laissez de côté [:kiki]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 20-08-2004 à 17:49:07    

drasche a écrit :

nl2br bordel :o
ptain vous avez une fonction spécialisée pour le faire et vous la laissez de côté [:kiki]


 
Y aura toujours des gens pour réinventer l'eau chaude, que veux tu :)
 

Citation :

Je voudrais savoir en fait comment on fait, au niveau des boutons, pour que quand on clique une fois sur un bouton il insère [*img] et quand on rappuie il insère [*/img].


 
C'est du javascript ça. J'avais fait un tableau avec les types de balises comme clés et en fonction du contenu j'affichais la balise ouvrante ou fermante :)

Reply

Marsh Posté le 20-08-2004 à 19:28:55    

simogeo a écrit :

[:kiki]
Oui les regex sont indispensables pour l'ubb code ... mais pour transformer les saut de ligne en <br /> faut vraiment être manche pour le coder de la sorte [:boidleau]

Code :
  1. $search = array(
  2. "/\[img\](http|https|ftp|mms):&#47;&#47;(\S+)\[&#47;img\]/si",
  3. "/\[center\](.+?)\[&#47;center\]/si",
  4. "/\[left\](.+?)\[&#47;left\]/si",
  5. "/\[right\](.+?)\[&#47;right\]/si",
  6. "/\[justify\](.+?)\[&#47;justify\]/si",
  7. "/\[taille1\](.+?)\[&#47;taille1\]/si",
  8. "/\[taille2\](.+?)\[&#47;taille2\]/si",
  9. "/\[taille3\](.+?)\[&#47;taille3\]/si",
  10. "/\[spoiler\](.+?)\[&#47;spoiler\]/si",
  11. "/\[pano\](.+?)\[&#47;pano\]/si",
  12. "/\[smilie\](.+?)\[&#47;smilie\]/si",
  13. "/\[g\](.+?)\[&#47;g\]/si",
  14. "/\[i\](.+?)\[&#47;i\]/si",
  15. "/\[s\](.+?)\[&#47;s\]/si",
  16. "/\[strike\](.+?)\[&#47;strike\]/si",
  17. "/\[x\](.+?)\[&#47;x\]/si",
  18. "/\[url=(http|https|ftp|mms):&#47;&#47;(.+?)\](.+?)\[&#47;url\]/si",
  19. "/\[url=(\S+)\](.+?)\[&#47;url\]/si",
  20. "/\[url\](.+?)\[&#47;url\]/si",
  21. "/\[code\](.+?)\[&#47;code\]/si",
  22. "/  /",
  23. "/\[#(.[a-zA-Z0-9_\- ]*?)\](.+?)\[&#47;#(.[a-zA-Z0-9_\- ]*?)\]/si",
  24. "/( |\r\n|\n|\r|:|;|\])(http|https|ftp|mms|ed2k):&#47;&#47;([^ !\'\"\r\n]+)/i",
  25. "/( |\r\n|\n|\r|:|\(|\)|\])www\.([^ !\'\"()\r\n]+)/i",
  26. "/( |\r\n|\n|\r|:|;|\])([^ !\'\"()\r\n;:]+)(@)([^ !\'\"()\r\n;]+)(\.)([^ !\'\"()\r\n;]+)/i",
  27. "/(\r\n)/",
  28. "/\[#(.[a-zA-Z0-9_\- ]*?)#\]/si"
  29. );
  30. $replace = array(
  31. "<img src=\"\\1://\\2\" alt=\"\\1://\\2\" title=\"\\1://\\2\" />",
  32. "<div align=\"center\">\\1</div>",
  33. "<div align=\"left\">\\1</div>",
  34. "<div align=\"right\">\\1</div>",
  35. "<div align=\"justify\">\\1</div>",
  36. "<span class=\"taille1\">\\1</span>",
  37. "<span class=\"taille2\">\\1</span>",
  38. "<span class=\"taille3\">\\1</span>",
  39. "<fieldset class=\"spoiler\"> <legend class=\"texteentete taille1 entete all_border\" style=\"padding: 2px;\"> <b>Sélectionner le cadre pour voir le texte : </b> </legend> \\1</fieldset>",
  40. "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td align=\"center\"><img src=\"images/panneau/h.gif\" alt=\"\"></td></tr><tr><td align=\"center\" class=\"pano\"><span class=\"taille1\" style=\"color:#000000;\">\\1</span></td></tr><tr><td align=\"center\"><img src=\"images/panneau/b.gif\" alt=\"\" title=\"[pano]texte[/pano]\"></td></tr></table>",
  41. "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td align=\"center\"><img src=\"images/panneau/h.gif\" alt=\"\"></td></tr><tr><td align=\"center\" style=\"background-image:url('images/panneau/m.gif');background-position:center;background-repeat:repeat-y;\">\\1</td></tr><tr><td align=\"center\"><img src=\"images/panneau/b.gif\" alt=\"\" title=\"[smilie]smiley[/smilie]\"></td></tr></table>",
  42. "<b>\\1</b>",
  43. "<i>\\1</i>",
  44. "<u>\\1</u>",
  45. "<strike>\\1</strike>",
  46. "<li>\\1</li>",
  47. "<a href=\"\\1://\\2\" target=\"_blank\" class=\"textesujet\" title=\"Cliquez ici pour ouvrir l'adresse dans une nouvelle fenêtre\">\\3</a>",
  48. "<a href=\"http://\\1\" target=\"_blank\" class=\"textesujet\" title=\"Cliquez ici pour ouvrir l'adresse dans une nouvelle fenêtre\">\\2</a>",
  49. "<a href=\"\\1\" target=\"_blank\" class=\"textesujet\" title=\"Cliquez ici pour ouvrir l'adresse dans une nouvelle fenêtre\">\\1</a>",
  50. "<fieldset class=\"all_border\" style=\"background-color: #fff;><pre style=\"font-family: Courier; font-size:10pt;\">\\1</pre></fieldset>",
  51. " &nbsp;",
  52. "<span style=\"color:\\1;\">\\2</span>",
  53. "\\1<a href=\"\\2://\\3\" target=\"_blank\" class=\"textesujet \" title=\"Cliquez ici pour ouvrir l'adresse dans une nouvelle fenêtre\">\\2://\\3</a>",
  54. "\\1<a href=\"http://www.\\2\" target=\"_blank\" class=\"textesujet \" title=\"Cliquez ici pour ouvrir l'adresse dans une nouvelle fenêtre\">www.\\2</a>",
  55. "\\1<a href=\"mailto:\\2@\\4\\5\\6\" target=\"_blank\" class=\"textesujet\" title=\"Envoyer un mail à cette adresse\">\\2@\\4\\5\\6</a>",
  56. "<br />",
  57. " <img src=\"images/smileys/perso/" . $config . "_\\1.gif\" alt=\"\" title=\"[#\\1#]\" />"
  58. );

...


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
Reply

Marsh Posté le 20-08-2004 à 19:53:16    


 
tu commences a me saouler toi [:itm]. T'essaies de me prouver quoi exactement ? Que tu sais te servir des regexs?  Qu'il  est possible de transformer un saut de ligne en br a coups de regex? [:noxauror]
 
 
 


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 20-08-2004 à 20:40:03    

Non il te dit que dans ce cas precis un preg_replace sur array() unique est plus rapide que de coupler un preg_replace sur array() + 1 nl2br()
C'est dingue d'être insultant comme ca quand on a tord.

Reply

Marsh Posté le 20-08-2004 à 20:54:06    

Ce qui est dingue, c'est de voir des gens réfuter la logique pure qu'un simple nl2br est plus rapide qu'un preg_replace.
 
Je viens de faire le test sur une page de mon site: le couple preg_replace+nl2br est plus rapide que le preg_replace tout seul (j'ai repris le bout de code de Gilbert pour faire ce test).
 
Pour moi ce résultat est parfaitement logique.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 20-08-2004 à 21:06:05    

ok au temms pour moi ca ne me semblait pas si évident que ca dans ce cas de figure la.

Reply

Marsh Posté le 20-08-2004 à 21:07:33    

Bin si: nl2br est une fonction dédiée à une seule tâche, t'as même pas à spécifier de paramètre, alors que preg_replace est beaucoup plus générique. Logiquement, nl2br va faire son boulot plus vite [:spamafote]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 20-08-2004 à 21:10:18    

MrFredG a écrit :

ok au temms pour moi ca ne me semblait pas si évident que ca dans ce cas de figure la.


 
renseignes toi sur le fonctionnement d'un moteur de regex.
 
et cesse d'être insultant comme ca quand tu as tort. [:aloy]


Message édité par simogeo le 20-08-2004 à 21:10:35

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 20-08-2004 à 21:32:12    

Ma remarque était torDue ;)

Reply

Marsh Posté le 20-08-2004 à 22:15:46    

Oui mais le torTue.
 
[plus là]

Reply

Marsh Posté le 20-08-2004 à 22:19:09    

simogeo a écrit :

tu commences a me saouler toi [:itm]. T'essaies de me prouver quoi exactement ? Que tu sais te servir des regexs?  Qu'il  est possible de transformer un saut de ligne en br a coups de regex? [:noxauror]

Simplement qu'il est tout a fait malin de profiter des array de transformation de bbcodes pour s'oiccuper en même temps des retours chariot et/ou de ligne. Ca ne va pas plus loin.


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
Reply

Marsh Posté le 20-08-2004 à 22:22:32    

je sens qu'on part dans un grand débat :D
 
perso je vais pas utiliser un canon pour tuer une mouche :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 20-08-2004 à 22:42:08    

Ceci est intéressant : http://fr.php.net/manual/fr/function.nl2br.php
 
Particulièrement ce passage :

Citation :

CK1 at wwwtech dot de
03-Feb-2001 02:07
Hi,
 
in answer to eightraks@linux-foo.com:
 
I think, this should work better:
 
$txt = preg_replace("/(\015\012)|(\015)|(\012)/","<br />",$txt);
 
It should work on windows with unix style newlines and mac style newlines, it should work on unix with windows style newlines and mac style newlines and it should work mac with windows style newlines and unix style newlines.
 
Windows style newlines are like this:
<CR><LF> -> \r\n -> \015\012
 
Mac style like this:
<CR> -> \r -> \015
 
Unix style like this:
<LF> -> \n -> \012
 
\012 -> 10 -> \n
\015 -> 13 -> \r
 
You shouldn't use \n or \r for replacing, because \n for windows is on unix enviroments \r\n and on mac enviroments \r - so you won't match newlines of foreign systems.
 
greets,
 CK1

Or, quand je lis l'explicatif de la fonction, je vois que la fonction nl2br() ne s'occupe que des \n et zappe (apparement) les \r ...
 
Edit : je vais quand même tester (pas sur de moi la ...)
 
Edit bis > ah ben non j'avais tord : la fonction parse bien les deux trucs.


Message édité par Gilbert Gosseyn le 20-08-2004 à 22:47:10

---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed