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


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

Euh j'ai lu ce message et j'ai pas vu que tu avais éssayé, j'ai dit qu'il y avais un probleme de construction et que c'était forcément à cause de çà. Et d'ailleurs je vois pas ou c'est marqué clairement ?

A moins que ce soit cette phrase que je n'ai pas compris au bout de 3 lecture et que je n'ai toujours pas compris:
Code PHP :
<?php 
Vu que php le compte commence du texte au lieu de ce qui doit être remplacé
.

Enfin bref donc là le trucs c'est qu'il faut partir sur une méthode complètement différentes puisque çà ne peut pas marcher tel quel avec preg_replace...

je te suggère d'aller faire un tour sur la doc de preg_replace_callback


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

Ok, merci mais j'ai déjà vu...
Je vais essayer quelquechose d'autre...


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

pourtant çà semble être la solution évidente au problème!
Code PHP :
<?php 
function parse($code,$chaine){
$convert=array('html'=>"html4strict",'php'=>'php');
$couleur =& new GeSHi($chaine,$convert[$code]);
return
$couleur->parse_code();
}
$chaine = preg_replace_callback('/\[(html)\](.+?)\[\/html\]/', "parse", $chaine);
Ca marche pas çà????


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

Non car parse_code est déjà une fonction utilisée dans GeSHi...

En fait, j'ai légèrement copié d'ici, si ca peut t'aider d'voir la version originale. @ l'époque je devais même pas savoir ce que ca voulais dire preg_replace Wink


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

ben je continue à affirmer que c'est la solution je viens d'ailleurs de trouver un tuto du sdz qui est exactement sur le thème et ou il propose la même solution avec callback
http://www.siteduzero.com/tuto-3-16163-1-creer-un-bbcode-muni-de-balises-geshi.html

Et ma fonction s'appelle parse et pas parse_code et même si elle s'appelait parse_code je pense que çà passe car la fonction parse_code de Geshi est une méthode et reste donc attaché à son objet.

Edit si il semble qu'il y ait un petit bug, la fonction corrigé:
function parse($var){
$convert=array('html'=>"html4strict",'php'=>'php');
$couleur =& new GeSHi($var[1],$convert[$var[0]]);
return $couleur->parse_code();
}


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

J'était justement en train de lire ce tuto et je ne vois pas à quoi correspond matches[2] dans :
Code PHP :
<?php
include_once('geshi.php');
function
couleur($matches){
if (
$matches[1] == "html"){
$matches[1] = "html4strict"; }
$geshi = new GeSHi($matches[2], $matches[1]);
if (
$matches[1] == "html4strict"){
return
'<div id="geshi"><strong>Code HTLM:</strong><div class="code">'.$geshi->parse_code().'</div></div>';
}
else {
return
'<div id="geshi"><strong>Code '.strtoupper($matches[1]).':</strong><div class="code">'.$geshi->parse_code().'</div></div>';
}
}
?>



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

$matches c'est l'argument.
Il contient les donnée renvoyer par preg_replace_callback le $matches[1] c'est la première parenthèse ("html" par exemple) et le $matches[2] la deuxième (l'expression entre les balises)
C'est expliqué dans la doc d'ailleurs je viens de me rendre compte que je croyais que çà commençais à 0 (et non à 1 comme c'est le cas...)


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

Et bien tout d'abord merci pour ton aide, mais j'ai une autre question : je ne suis pas expert ( loin de là ) en regex, mais comment pourrais je procéder pour récupérer le texte qui se trouve dans le $1 ?
Si, par exemple, je met :
Code PHP :
<?php 
$chaine
= preg_replace('/\[php\](.+?)\[\/php\]/', '$1', $chaine);
comment je peux récupérer le texte de $1 ??
J'ai pensé à preg_quote, mais si on ne connait pas la valeure ??

Merci d'avance,


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

Je te conseil d'aller faire un petit tour sur le tuto du sdz sur les regex (ou sur la doc si tu préfère Smile ). Tu pourras certainement y apprendre pas mal de trucs.

Bon là pour ton problème, en fait je crois que tu donnes la réponse en même temps sans le savoir!

preg_replace('/\[php\](.+?)\[\/php\]/', '$1', $chaine);
renvoie ce que vaut $1 (sachant que $1 c'est tout ce qui est entre parenthèse)
Donc pour ta question c'est simple tu l'as ecrit
$texte=preg_replace('/\[php\](.+?)\[\/php\]/', '$1', $chaine);


Pour aller un peu plus loin:
Si tu fait
preg_replace('/\[(php)\](.+?)\[\/php\]/', '$1', $chaine);
çà te renvoie "php" puisque c'est la première parenthèse

Et si tu fait
preg_replace('/\[(php)\](.+?)\[\/php\]/', '$2', $chaine);
Ca te renvoie ce qui est entre [ php ] et [ /php ] puisque c'est la seconde parenthèse


Donc si tu suis le raisonnement avec l'autre fonction preg_replace_callback:
Code PHP :
<?php 
$chaine
="le texte avant[html]le texte dedans[/html]le texte après";
preg_replace_callback('/\[(html)\](.+?)\[\/html\]/', "parse", $chaine);
Le ^ indiquant le début de la chaine le * indiquant n'importe quoi et le $ la fin de la chaine
la fonction parse() recevra en argument un tableaux array('1'=>"html",3 => "le texte dedans")
Il te suffit donc d'appliquer l'objet Geshi qui correspond, c'est ce que fait la fonction parse :
Code PHP :
<?php 
function parse($arg){
$convert=array('html'=>"html4strict",'php'=>'php');
$couleur =& new GeSHi($arg[2],$convert[$arg[1]]);
return
$couleur->parse_code();
}

Et voila parse sort normalement "le texte avantle texte dedansle texte après" la partie en gras etant mis en forme par GeSHi

NB: preg_quote sert à échaper les caractère spéciaux d'une regex afin de les chercher tel quel dans la recherche. Celà dit t'étais sur la bonne voie avec l'idée d'isoler la partie à colorer, avec preg_replace_callback c'est optimisé


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

En fait, cela marche lorsque j'éxecute cette commande :
Code PHP :
<?php 
$chaine
= preg_replace('/\[php\](.+?)\[\/php\]/', new GeSHi('$1','php'), $chaine);
( ce qui n'affiche pas le code, juste Object ) mais lorsque je rajoute parse_code, à la fin, ca me met :
Error a écrit :Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /mnt/140/sdb/1/8/0tt0k4r/BBcode.php on line 18
. :mauvais:

Maintenant au moins, je sais dans quelle direction m'orienter :ninga: , je dois tenter d'afficher le 'parse_code' indirectement :rip: , donc sans le -> :non: :non:

____________________________________________
{ environ 6 minutes plus tard }

Après plusieurs tests, je trouve que :

• Lorsque j'essaie
Code PHP :
<?php 
$v
->parse_code;
$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\]/', '$1', $chaine);
$chaine = preg_replace('/\[php\](.+?)\[\/php\]/', new GeSHi('$1','php')$v, $chaine);
ca m'affiche
Citation :Parse error: syntax error, unexpected T_VARIABLE in /mnt/140/sdb/1/8/0tt0k4r/BBcode.php on line 20

• ou alors
Code PHP :
<?php 
$v
= parse_code;
$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\]/', '$1', $chaine);
$chaine = preg_replace('/\[php\](.+?)\[\/php\]/', new GeSHi('$1','php')->$v, $chaine);

donne pareil que le premier :wow2: