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) |
RE: Problème BBcode - Zamentur - 06-02-2008 Citation :Maintenant au moins, je sais dans quelle direction m'orienter 71 , je dois tenter d'afficher le 'parse_code' indirectementTu "crois" savoir dans quel direction t'orienter... Là tu as un vrai problème de compréhension du fonctionnement d'une fonction! C'est pas possible que çà marche de cette manière avec preg_replace. #Pourquoi? On reprend ton exemple: Code PHP :
preg_replace est une fonction, ce qui veut dire que c'est un genre de boite noire dans laquel on rentre des valeurs dans un format définit et qui nous ressort des valeurs dans un format définit. Ainsi le second attribut de preg_replace attend quelques choses au format texte. new GeSHi('$1','php') représente un objet et donc ce n'est pas un texte. D'ou le message d'erreur Citation :Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /mnt/140/sdb/1/8/0tt0k4r/BBcode.php on line 18 Maintenant effectivement la méthode parse_code() de GeSHi renvoie une chaine de caractère. Sauf que si on regarde l'ordre d'exécution on s'aperçoit que la coloration sera faite non pas sur ce qui se trouve entre les balises bbcode, mais sur la chaine de caractère '$1' Donc même si tu réussissais à faire ce que tu dis "tenter d'afficher le 'parse_code' indirectement" Voici dans quel ordre serait faite les actions:
La coloration est donc faite avant le remplacement, normal que ce soit pas coloré! Il faut donc réussir à faire la coloration après(et non avant) le remplacement ce que au risque de me répéter preg_replace_callback permet. Car preg_replace_callback attend en second argument non plus une chaine de caractère mais le nom d'une fonction dans laquel il passeras en argument les chaines contenue dans les parenthèses de l'expression régulière. preg_replace_callback remplace alors la partie de chaine de caractere qui valider l'expression rationelle par le résultat de cette fameuse fonction Note: Je t'ai présenté dans le poste précédent une solution qui je pense fonctionne (pas testé mais çà doit être bon). Faudrait au moins songer à regarder dans la direction qu'on te donne, et si tu ne comprend pas son intérêt demander pourquoi celle là plutôt qu'une autre! Si tu ignores ce qu'on te dis je vois pas l'intérêt de faire un poste de demande d'aide! Rappel de la solution: Code PHP :
|