PDA

View Full Version : bbcode


os2
15 septembre 2004, 04h51
salut

je tente de faire parser du texte qu'un usager à entrer avant de l'insérer dans la bd...


$str = $_POST["texttutoriel"];
$str = preg_replace_callback('`<(code|url|img)>(.+?)</\1>`si', 'bbcode', htmlentities($str));


ensuite ma fonction bbcode


function bbcode($m) {
switch($m[1]) {
// balise case 'code' :
return '<div class="code"><pre>'.$m[2].'</pre></div>';
break;
// balise <url>
case 'url' :
if (preg_match ('`^http://`', $m[2]))
return '<a href="'.$m[2].'" class="machin">'.$m[2].'</a>';
else
return '<a href="http://'.$m[2].'" class="machin">'.$m[2].'</a>';
break;
// balsie <img>
case 'img' :
return '<img src="'.$m[2].'" alt="mon image"/>';
}
}


avec ce code je remplace certain tag....

le problème est que tout ce que contient $_POST["texttutoriel"] est convertit... ce qui devrait pas être le cas

si ça fonctionnerais, ça résoudrait mon problème d'une certain façon... ainsi l'usager n'aurait pas besoin de faire le travail lui même

Benjy
15 septembre 2004, 07h50
le problème est que tout ce que contient $_POST["texttutoriel"] est convertit... ce qui devrait pas être le cas

si ça fonctionnerais, ça résoudrait mon problème d'une certain façon... ainsi l'usager n'aurait pas besoin de faire le travail lui même
Moi y'en a pas comprendre quoi toi y'en a vouloir...

os2
15 septembre 2004, 12h19
Moi y'en a pas comprendre quoi toi y'en a vouloir...

tu parles et écrit en francais?



le texte entré par l'usager donc $_POST["texttutoriel"]; qui est mis dans str....

contient n'importe quoi....
par exemple:

<h1>il fait froid</h1>,
<code>
allo
</code>

après passage dans la fonction, tout est convertit en caractère xhtml....

on aurait donc...

&lt;il fait froid&gt;....

ce que je désire pas...

je veux juste remplacer que les balises que j'ai spécifié

Spycam
15 septembre 2004, 14h10
Ouch.
J'aurais plutot recherché où sont les balises <code> </code> etc, puis traduit son contenu.
Parce que là çà va être galère pour que les deux fonctions se parlent.

Benjy
15 septembre 2004, 14h27
tu parles et écrit en francais?Mieux que certains, mais ton premier message était tellement clair...
Ouch.
J'aurais plutot recherché où sont les balises <code> </code> etc, puis traduit son contenu.
Parce que là çà va être galère pour que les deux fonctions se parlent.Et puis généralement on utilise des crochets, justement pour que ce soit plus facile à détecter...
Mais bon je dis ça, je dis rien (© Cougar).

fonji
15 septembre 2004, 14h38
Le problème c'est que la fonction htmlentities($str) remplace TOUS les caractères risquant de poser problème en html (<,>, é, à, ...) et comme tu l'appelles sur toute ta chaîne de caractère, elle va être entièrement modifiée...
Tu crois pas qu'un str_replace (http://www.nexen.net/docs/php/annotee/function.str-replace.php) serait plus utile ?
Bon, c'est vrai qu'après c'est pas évident pour trouver les url, mais c'est faisable, à la limite avec des substrings....
En tous cas amuse-toi bien, j'édite si je trouve une meilleure idée...

EDIT : voilà une idée à étudier :
Faire un preg_replace() sans appeler ton htmlentities, celui là tu le feras dans la boucle uniquement en cas de code :
case 'code' :
return '<div class="code"><pre>'.htmlentities($m[2]).'</pre></div>';
break;
Comme ça ben les balises html du code seront visibles et pas interprétées, les autres modifieront la mise en page.

Sinon ben tu t'amuses avec des str_replace... Mais en fait c'est pas pratique...