Interpreter du BBcode
6 messages
• Page 1 sur 1
- code
- WRInaute impliqué

- Messages: 648
- Inscription: 29 Juil 2005
Interpreter du BBcode
Bonjour,
je souhaiterais permettre aux personnes qui laissent un commentaire sur mon site de pouvoir intégrer à leur message des smilies (comme sur ce forum)
lorsque qqn clique sur un smilie, celui-ci est envoyé dans le commentaire grace à une fonction javascript.
Pour l'instant j'ai cette fonction :
qui me permet d'inclure mon smilie dans le commentaire.
Le problème c'est que je n'y connais rien en bbcode. Comment faut-il parser pour ne pas avoir [triste] dans le commentaire mais bien le smilie qui doit lui être associé ?
Merci pour votre aide
je souhaiterais permettre aux personnes qui laissent un commentaire sur mon site de pouvoir intégrer à leur message des smilies (comme sur ce forum)
lorsque qqn clique sur un smilie, celui-ci est envoyé dans le commentaire grace à une fonction javascript.
Pour l'instant j'ai cette fonction :
<IMG alt="" src="/img/emoticones/triste.gif" onclick="javascript:emoticone('[triste]');" style="cursor: pointer;">
qui me permet d'inclure mon smilie dans le commentaire.
Le problème c'est que je n'y connais rien en bbcode. Comment faut-il parser pour ne pas avoir [triste] dans le commentaire mais bien le smilie qui doit lui être associé ?
Merci pour votre aide
-

CaYuS - WRInaute impliqué

- Messages: 601
- Inscription: 14 Juil 2005
Bonjour,
Dans ce cas précis, il y a qu'un seul terme à remplacer par un smiley.
Supposons que $texte contienne le contenu de ton message, un simple replace sur cette variable, avant de l'afficher, pour remplacer toutes les occurences de [triste] par un img src avec l'émoticon associée devrait faire l'affaire.
Après, si tu désires créer un bbcode like plus complexe, avec des balises ouvrantes et fermantes, tu peux utiliser les expressions regulières et la fonction preg_replace.
Pour y voir plus clair, je te conseille un très bon cours à ce sujet :
http://www.siteduzero.com/php/regex2.php
Dans ce cas précis, il y a qu'un seul terme à remplacer par un smiley.
Supposons que $texte contienne le contenu de ton message, un simple replace sur cette variable, avant de l'afficher, pour remplacer toutes les occurences de [triste] par un img src avec l'émoticon associée devrait faire l'affaire.
Après, si tu désires créer un bbcode like plus complexe, avec des balises ouvrantes et fermantes, tu peux utiliser les expressions regulières et la fonction preg_replace.
Pour y voir plus clair, je te conseille un très bon cours à ce sujet :
http://www.siteduzero.com/php/regex2.php
- guitvn7
- WRInaute discret

- Messages: 137
- Inscription: 15 Fév 2005
Tu as raison CaYuS, soit $mes une chaîne contenant du texte mélangé avec du BBCode :
Les balises u,i sont remplacées par les balises html correspondantes (on peut les effacer aussi), les balises bbcode "url" sont éffacées. La dernière expression fait un lien sur toutes les url contenues dans le texte. Manque les smileys à interpréter, ce qui devrait donner un truc du genre (pas testé) :
Voilà
- Code: Tout sélectionner
$mes=eregi_replace("\[i\:([[:alnum:]]+)\]","<i>",$mes);
$mes=eregi_replace("\[u\:([[:alnum:]]+)\]","<u>",$mes);
$mes=eregi_replace("\[/u\:([[:alnum:]]+)\]","</u>",$mes);
$mes=eregi_replace("\[/i\:([[:alnum:]]+)\]","</i>",$mes);
$mes=str_replace("[url]","",$mes);
$mes=str_replace("[/url]","",$mes);
$mes = eregi_replace(
"([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])",
"<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</a>",
$mes);
Les balises u,i sont remplacées par les balises html correspondantes (on peut les effacer aussi), les balises bbcode "url" sont éffacées. La dernière expression fait un lien sur toutes les url contenues dans le texte. Manque les smileys à interpréter, ce qui devrait donner un truc du genre (pas testé) :
- Code: Tout sélectionner
$mes=eregi_replace("\:([[:alnum:]]+)\:","",$mes);
Voilà
-

maxttb - WRInaute occasionnel

- Messages: 477
- Inscription: 27 Fév 2004
Par contre, pour des raisons de sécurité (si tu veux pas que n'importe qui détruise la page en ouvrant des balises jamais fermées), je te recommande plutôt de suivre ce principe dans tes regexs :
Comme ca, si une balise est ouverte, mais jamais fermée, le remplacement n'aura pas lieu.
Pour info, voici les regexs que j'utilise dans un petit forum fait maison :
C'est du Perl, mais les regexs sont facilement adaptables en PHP (\d ne matche que les chiffres et \w, les caractères alpha-numériques).
- Code: Tout sélectionner
eregi_replace('\[i\](.*?)\[/i\]', '<i>\1</i>', $message);
Comme ca, si une balise est ouverte, mais jamais fermée, le remplacement n'aura pas lieu.
Pour info, voici les regexs que j'utilise dans un petit forum fait maison :
- Code: Tout sélectionner
$$text =~ s{\[img\](.+?)\[/img\]} {<img src="$1" alt="" />}g;
$$text =~ s{\[i\](.+?)\[/i\]} {<i>$1</i>}g;
$$text =~ s{\[u\](.+?)\[/u\]} {<u>$1</u>}g;
$$text =~ s{\[b\](.+?)\[/b\]} {<b>$1</b>}g;
$$text =~ s{\[s\](.+?)\[/s\]} {<s>$1</s>}g;
$$text =~ s{\[url\](.+?)\[/url\]} {<a href="$1">$1</a>}g;
$$text =~ s{\[quote\](.+?)\[/quote\]} {<blockquote>$1</blockquote>}g;
$$text =~ s{\[size=(\d+)\](.+?)\[/size\]} {<span style="font-size:$1\pt;">$2</span>}g;
$$text =~ s{\[color=(\w+)\](.+?)\[/color\]} {<span style="color:$1;">$2</span>}g;
$$text =~ s{\[url=(.+?)\](.+?)\[/url\]} {<a href="$1">$2</a>}g;
C'est du Perl, mais les regexs sont facilement adaptables en PHP (\d ne matche que les chiffres et \w, les caractères alpha-numériques).
6 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Les meilleures extensions Firefox pour le référencement - 19-02-2010
- Le forum WebRankInfo sur mobile / smartphone - 13-01-2011
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
