JeuWeb - Crée ton jeu par navigateur
Problème BBcode - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème BBcode (/showthread.php?tid=2342)

Pages : 1 2 3


Problème BBcode - Valter - 01-02-2008

Bonjour, il se trouve que j'ai un problème avec mon BBcode ( plus précisément la partie code en couleur ).
Voici mon code :
Code PHP :
<?php 
$html
=& new GeSHi("$1","html4strict");
$php =& new GeSHi("$1","php");
$asp =& new GeSHi("$1","asp");
$batch =& new GeSHi("$1","batch");
$perl =& new GeSHi("$1","perl");
$python =& new GeSHi("$1","python");
$delphi =& new GeSHi("$1","delphi");
$js =& new GeSHi("$1","javascript");
$xml =& new GeSHi("$1","xml");
$chaine = preg_replace('/\[quote\](.+?)\[\/quote\]/', '"<sup style="border: 1px dashed #9a2500; background-color: #000030; color: #9a2500;">&nbsp;$1&nbsp;</sup>"', $chaine);
$chaine = preg_replace('/\[html\](.+?)\[\/html\]/', $html->parse_code(), $chaine);
$chaine = preg_replace('/\[php\](.+?)\[\/php\]/', $php->parse_code(), $chaine);
$chaine = preg_replace('/\[asp\](.+?)\[\/asp\]/', $asp->parse_code(), $chaine);
$chaine = preg_replace('/\[batch\](.+?)\[\/batch\]/', $batch->parse_code(), $chaine);
$chaine = preg_replace('/\[perl\](.+?)\[\/perl\]/', $perl->parse_code(), $chaine);
$chaine = preg_replace('/\[python\](.+?)\[\/python\]/', $python->parse_code(), $chaine);
$chaine = preg_replace('/\[delphi\](.+?)\[\/delphi\]/', $delphi->parse_code(), $chaine);
$chaine = preg_replace('/\[js\](.+?)\[\/js\]/', $js->parse_code(), $chaine);
$chaine = preg_replace('/\[xml\](.+?)\[\/xml\]/', $xml->parse_code(), $chaine);

Et lorsque je teste ma messagerie, et bien... il ne s'affiche rien à par le texte normal.
Je crois que cela viens du fait que, lorsque j'enregistre le message dans ma bdd, j'utilise :
Code PHP :
<?php 
mysql_escape_string
(htmlspecialchars

Y a t-il un moyen de résoudre ce problème sans avoir à retirer mes protections ?


RE: Problème BBcode - Amrac - 01-02-2008

Tu fait d'abord ton htmlspecialchars pour être sur que l'utilisateur n'as pas mis de saloperies.

Et c'est seulement après que tu passe ton BBCode. Car ton bbcode va produire de l'html, donc si tu le fait passer par un htmlentities, qui est justement une fonction "anti-html", forcement ca bloque.

En gros, tu laisse ta protection, tu la met juste plus tôt.


RE: Problème BBcode - Zamentur - 01-02-2008

si c'est pas çà je pense qu'il faudra mettre un peu plus de chose car on ne peut pas deviner le code des objets qui sont utilisés...


RE: Problème BBcode - Valter - 02-02-2008

Je n'ai pourtant pas mi de htmlentities et le htmlspecialchars est utilisé AVANT le BBcode !
Alors, avez vous une solution ? Merci quand même de votre aide, mais je n'ai toujours pas trouvé...
Lorsque je remplace par :
Code PHP :
<?php 
$chaine
= preg_replace('/\[php\](.+?)\[\/php\]/', new GeSHi("$1","php")->parse_code(), $chaine);
...avec ou sans le 'new', ca me met
Citation :Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /mnt/140/sdb/1/8/0tt0k4r/BBcode.php on line 28
==> logique.

En revanche, je crois que c'est le $1 du regex qui gène dans la partie
Code PHP :
<?php 
$html
=& new GeSHi("$1","html4strict");
$php =& new GeSHi("$1","php");
$asp =& new GeSHi("$1","asp");
$batch =& new GeSHi("$1","batch");
$perl =& new GeSHi("$1","perl");
$python =& new GeSHi("$1","python");
$delphi =& new GeSHi("$1","delphi");
$js =& new GeSHi("$1","javascript");
$xml =& new GeSHi("$1","xml");

Vu que php le compte commence du texte au lieu de ce qui doit être remplacé. Là, j'ai plus d'idées :non: :non:


RE: Problème BBcode - Amrac - 03-02-2008

Ne connaissant pas ton système, est-ce que tu pourrait faire tourner un test pour moi?

Code PHP :
<?php 
$chaine
= [quote]Boudibouda di boudi da ba[/quote];
echo
'Avant le passage dans le BBCode: "'.$chaine.'" <br />';

Ensuite tu passe $chaine dans ton BBCode, puis:
Code PHP :
<?php 
echo 'Après le passage dans le BBCode: "'.$chaine.'" <br />';

Si on a bien le résultat attendue sur le second echo, le problème vient bien de l'enregistrement en base de données, si on a pas notre résultat sur le echo, alors le problème vient de ton BBCode.


RE: Problème BBcode - Valter - 03-02-2008

En fait le 'quote' ca marche, mais c'est le code (html, php, batch,etc...) que je n'arrive pas à faire fonctionner car le $1, au lieu d'être considéré comme ce qu'il reste et le reste à remplacer, il le considère comme du simple texte, vu qu'il doit avoir les guillements "".


RE: Problème BBcode - Zamentur - 03-02-2008

Tu pourrais faire un echo $html->parse_code(); qu'on sache ce que çà donne, histoire de pas chercher complètement à coté du vrai problème?


RE: Problème BBcode - Valter - 03-02-2008

Si je fais echo $php->parse_code, ca me met $1 en colorié php. En revanche, ca marche bien à l'extérieur du bbcode.

exemple ici : http://0tt0k4r.free.fr/zxml.php


RE: Problème BBcode - Zamentur - 03-02-2008

Bon je viens de comprendre le problème.

C'est un problème de construction:
Code PHP :
<?php 
$chaine
= preg_replace('/\[php\](.+?)\[\/php\]/', new GeSHi("$1","php")->parse_code(), $chaine);

Ben là en fait la chaine $1 est traité par ton objet GeSHi , et ensuite seulement $1 est remplacé par ce qui est contenue dans les parenthèses (.+?). Du coup forcement ce contenue n'est pas formaté par l'objet GeSHi...

J'étais complètement en train de chercher à coté, mais là c'est évident.


RE: Problème BBcode - Valter - 03-02-2008

Si tu avais lu ce message,
Valter a écrit :Je n'ai pourtant pas mi de htmlentities et le htmlspecialchars est utilisé AVANT le BBcode !
Alors, avez vous une solution ? Merci quand même de votre aide, mais je n'ai toujours pas trouvé...
Lorsque je remplace par :
Code PHP :
<?php 
$chaine
= preg_replace('/\[php\](.+?)\[\/php\]/', new GeSHi("$1","php")->parse_code(), $chaine);
...avec ou sans le 'new', ca me met
Citation :Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /mnt/140/sdb/1/8/0tt0k4r/BBcode.php on line 28
==> logique.

En revanche, je crois que c'est le $1 du regex qui gène dans la partie
Code PHP :
<?php 
$html
=& new GeSHi("$1","html4strict");
$php =& new GeSHi("$1","php");
$asp =& new GeSHi("$1","asp");
$batch =& new GeSHi("$1","batch");
$perl =& new GeSHi("$1","perl");
$python =& new GeSHi("$1","python");
$delphi =& new GeSHi("$1","delphi");
$js =& new GeSHi("$1","javascript");
$xml =& new GeSHi("$1","xml");

Vu que php le compte commence du texte au lieu de ce qui doit être remplacé. Là, j'ai plus d'idées :non: :non:

...tu remarquera que j'ai déjà essayé et sans résultat :non: :non: