Interpreter du BBcode
6 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
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
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
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à
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
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités






le forum