JeuWeb - Crée ton jeu par navigateur
Parser des BBcode, cas un peu spécial - 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 : Parser des BBcode, cas un peu spécial (/showthread.php?tid=4737)

Pages : 1 2 3


RE: Parser des BBcode, cas un peu spécial - My Hotel - 14-04-2010

Ben, en gros le principe est simple : si tu remplace tous les a par <?php dire_bonjour(); ?>, y'aura à la sortie des <?php dire_bonjour(); ?>. Mais avec l'option e, alors dire_bonjour(); sera exécutée, et ce qu'elle retourne sera affiché.
Donc si la fonction return 'bonjour';, alors les a seront remplacés par bonjour.

Dans ton cas, la fonction interroge la BDD/le service web (pour le cache) et renvoie le pseudo.

Mais Allwise a raison, preg_replace_callback fait la même chose, en un peu plus simple à coder je pense Wink

Bye


RE: Parser des BBcode, cas un peu spécial - php_addict - 16-04-2010

salut

une derniere question:

bon, mon parser fonctionne, merci encore, mais j'ai un dernier tout petit soucis:

j'ai un texte suivant:

grr grr...[BBcode]blabla[/BBcode]grr grr...[BBcode]blabla[/BBcode]grr grr...

le probleme c'est qu'avec ma REGEX, j'obtient:

[BBcode]blabla[/BBcode][BBcode]blabla[/BBcode]grr grr...

c'est à dire qu'il me reste en fin de texte des caractères non remplacés (grr grr...):

j'ai pourtant retourné le problème dans tout les sens mais je ne vois pas en quoi mon REGEX ne fonctionne pas comme voulu...

Code :
$texte='grr grr...[BBcode]blabla[/BBcode]grr grr...[BBcode]blabla[/BBcode]grr grr...';

$search[0]='#(.*)\[(.*)\](.*)\[(.*)\](.*)#isU';
$replace[0]='[$2]$3[$4]';
$extrait = preg_replace($search, $replace, $texte);

echo $extrait;

un coup de pouce ?

bonne journée


RE: Parser des BBcode, cas un peu spécial - php_addict - 08-05-2010

bonjour

bon j'ai capitulé pour le probleme de mon message ci dessus...mais j'ai une autre question a vous soumettre:

imaginons que j'ai un texte:

Code :
[spoiler]blablabla[/spoiler]
[spoiler]blablabla[/spoiler]
[spoiler]blablabla[/spoiler]
[spoiler]blablabla[/spoiler]

que je voudrais parser en:

Code :
<div="spoiler1">blablabla</div>
<div="spoiler2">blablabla</div>
<div="spoiler3">blablabla</div>
<div="spoiler4">blablabla</div>

dans ce cas, un REGEX n'est pas vraiment envisageable car il me faut une variable qui s'incrémente...

je pensais donc à une boucle while{} mais n'est ce pas un peu lourdingue si le texte a parser fais entre 3000 et 5000 caractères?


RE: Parser des BBcode, cas un peu spécial - Anthor - 08-05-2010

Regardes du côté de "preg_replace_callback"


RE: Parser des BBcode, cas un peu spécial - php_addict - 08-05-2010

(08-05-2010, 02:46 PM)Anthor a écrit : Regardes du côté de "preg_replace_callback"

merci mais je ne crois pas que cela puisse fonctionner, car j'ai besoin d'incrementer une variable, donc cette variable ne peut pas etre dans la function du preg_replace_callback à moins qu'elle soit une variable de session...

je vais garder pour le moment ma boucle while...

Code :
    $i=1;
    while(preg_match('#\[spoiler\](.*)\[/spoiler\]#isU',$texte)>=1)
    {
        $search='#\[spoiler\](.*)\[/spoiler\]#isU';
        $replace='<div id="spoiler' .$i . '"></div>';
        
        $texte = preg_replace($search, $replace, $texte,1);
        $i++;
    }



RE: Parser des BBcode, cas un peu spécial - Anthor - 08-05-2010

Regardes du côté de la portée des variables, rien ne t'empêche d'avoir quelques chose de plus globale, sans aller jusqu'à utiliser une variable de session.
Je ne te donne pas la fonction au hasard ^^


RE: Parser des BBcode, cas un peu spécial - php_addict - 08-05-2010

(08-05-2010, 08:47 PM)Anthor a écrit : Je ne te donne pas la fonction au hasard ^^

ah oui,....mais c'est bien sur...les variables globales...suis je bête.

merci Wink


RE: Parser des BBcode, cas un peu spécial - Sephi-Chan - 08-05-2010

Non, pas forcément globale. Quand tu fais une boucle while avec un indice (une variable $i par exemple), tu utilises bien une variable classique, définie plus haut dans la portée : elle est accessible dans l'appel à la boucle. Rien n'empêche ton callback de recevoir cette variable en argument.


Sephi-Chan


RE: Parser des BBcode, cas un peu spécial - php_addict - 03-02-2011

bonsoir

je me permet de revenir sur ce vieux topic car j'ai un dernier tout petit soucis avec mon parseur de bbcode, pour commencer un exemple en image de ce qui doit être obtenu:

[Image: parseur.jpg]

mon parseur fonctionne comme ceci:

je "scanne" les données à parser afin d'en sortir un array qui me servira à convertir les bbcode en html par exemple dans ce cas:


array(['<a>lphonse'] => '<a href="joueur.php?id=12">&lt;a&gt;lphonse</a>')

cet array me sert lors de la conversion des bbcodes en html, pas de problème...

là où se situe mon problème c'est qu'il peut y avoir des entités html dans le texte et au sein même des bbcode

CAS #1:

si je passe dans un premier temps mes données issues de la base de données dans un htmlspecialchars() je me retrouve avec ceci :

[player]&lt;a&gt;lphonse[/player] mais je n'ai pas de joueur nommé &lt;a&gt;lphonse car il se nomme <a>lphonse donc je ne peut pas parser le BBcode

CAS #2:

si je passe dans un premier temps mes données issues de la base de données dans un parseur BBcode je me retrouve avec ceci:
<a href="joueur.php?id=12">&lt;a&gt;lphonse</a>

puis je le passe dans le htmlspecialchars() (à cause du texte qui peut contenir du html) et là catastrophe j'obtiens:

&lt;a href="joueur.php?id=12"&gt;&lt;a&gt;lphonse&lt;/a&gt;

ce qui n'est plus un lien mais du texte...


je ne sais plus trop comment m'y prendre avec mon parseur pour convertir les entités html du texte mais pas ceux qui peuvent être contenu dans les bbcodes...

désolé si ce n'est pas très clair

merci pour ceux qui auront eu le courage de lire ces derniers mots Wink


RE: Parser des BBcode, cas un peu spécial - Ter Rowan - 04-02-2011

je vais sûrement dire une connerie mais

si dans ta table "joueur" au lieu d'avoir id / nom tu avais

id / nom / nomtransformé

genre

12 / <a>lphonse / &lt;a&gt;lphonse

et puis tu fais le cas 1 mais avec la colonne transformée

du coup je surchargerais même htmlspecialchars


maFonctiondeTransformation( ...)
{
htmlspecialchars(....);
}

et tu appelles mafonctiondeTransformation pour l'insert/update du joueur et pour cette affaire (voire pour d'autres)

l'intérêt étant alors que cette transformation n'est pas dépendante de ta restitution (ici html) si demain y a d'autres contraintes (genre tu ne veux plus de i minuscule) alors tu remplaceras l'intéreieur de maFonctionDeTransformation