Interpreter du BBcode

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

code
WRInaute passionné
WRInaute passionné
 
Messages: 648
Inscription: Ven Juil 29, 2005 14:25

Interpreter du BBcode

Message le Mer Sep 07, 2005 16:21

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 :
<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 passionné
WRInaute passionné
 
Messages: 601
Inscription: Jeu Juil 14, 2005 7:25

Message le Ven Sep 09, 2005 16:13

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

guitvn7
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 137
Inscription: Mar Fév 15, 2005 18:53

Message le Ven Sep 09, 2005 20:38

J'ai fait quelques trucs comme ça sur mon site, si tu veux envoies moi un mp et je te donnerai la syntaxe de quelques expressions régulières utiles.


CaYuS
WRInaute passionné
WRInaute passionné
 
Messages: 601
Inscription: Jeu Juil 14, 2005 7:25

Message le Ven Sep 09, 2005 20:47

S'il s'agit d'expressions régulières utiles, pourquoi ne pas tout simplement les écrire ici, afin d'être utile pour d'autres personnes également ? :)

guitvn7
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 137
Inscription: Mar Fév 15, 2005 18:53

Message le Lun Sep 12, 2005 8:08

Tu as raison CaYuS, soit $mes une chaîne contenant du texte mélangé avec du BBCode :

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 impliqué
WRInaute impliqué
 
Messages: 477
Inscription: Ven Fév 27, 2004 16:36

Message le Lun Sep 12, 2005 10:27

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 :
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).


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