Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REMPLACEMENT BALISES BBCODE


Information sur la source

Catégorie :Chaîne de caratère Niveau : Débutant Date de création : 15/03/2005 Vu / téléchargé: 7 780 / 405

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

Description

Cette petite fonction remplace les balises BBCode en des balises html appropriées.
Les spécifications sur phpBB.com sont assez floues (casse, pb d'imbrications, etc)
donc j'ai fait au mieux.
Cette fonction ne vérifie jamais la validité des balises ni leur imbrication, une source récente de malalam le fait je crois.
Elle gère toutes les balises dont les spécifications sont sur http://www.phpbb.com/phpBB/faq.php?mode=bbcode , à l'exception des listes ordonnées.
 

Source

  • <?
  • function BBtags($t) {
  • $t = preg_replace("!\[(url|email)\](.+)\[/(?:url|email)\]!Ui","[$1=$2]$2[/$1]",$t);
  • $t = preg_replace("!\[url=([^\]]+)\](.+)\[/url\]!Ui","<a href=\"$1\" target=\"_blank\">$2</a>",$t);
  • $t = preg_replace("!\[email=([^\]]+)\](.+)\[/email\]!Ui","<a href=\"mailto:$1\" target=\"_blank\">$2</a>",$t);
  • $t = preg_replace("!\[img\](.+)\[/img\]!Ui","<img src=\"$1\" alt=\"\" border=\"0\">",$t);
  • $t = preg_replace("!\[(/?[biu])\]!mi","<$1>",$t);
  • $t = preg_replace("!\[color=([^\]]+)\]!mi","<font style=\"color: $1;\">",$t);
  • $t = preg_replace("!\[size=([^\]]+)\]!mi","<font style=\"font-size: $1px;\">",$t);
  • $t = preg_replace("!\[/(?:color|size)\]!i","</font>",$t);
  • //$q1 et $c1 sont à personnaliser...
  • $q1 = "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody><tr><td><span style=\"font-size : 11px\"><b>";
  • $q2 = "</b></span></td></tr><tr><td style=\"font-family: Verdana, sans-serif; font-size: 11px; color: #444444; background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-width: 1px\">";
  • $q3 = "</td></tr></tbody></table>";
  • $t = preg_replace("!\[quote=([^\]]+)\](.+)\[/quote\]!Umi","$q1 $1 a écrit :$q2 $2 $q3",$t);
  • $t = preg_replace("!\[quote\](.+)\[/quote\]!Umi","$q1 Citation : $q2 $1 $q3",$t);
  • $c1 = "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody><tr><td style=\"font-family: TimesNewRoman, sans-serif; font-size: 11px; color: #444444; background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-width: 1px\">";
  • $t = preg_replace("!\[code\](.+)\[/code\]!Umi","$c1 $1 $q3",$t);
  • $t = preg_replace("!\[list\](.+)\[/list\]!Umi","<ul> $1 </ul>",$t);
  • $t = preg_replace("!\[\*\](.+)(?=(\[\*\]|</ul>))!Umi","<li>$1</li>",$t);
  • return $t;
  • }
  • ?>
<?
function BBtags($t) {
	$t = preg_replace("!\[(url|email)\](.+)\[/(?:url|email)\]!Ui","[$1=$2]$2[/$1]",$t);
	$t = preg_replace("!\[url=([^\]]+)\](.+)\[/url\]!Ui","<a href=\"$1\" target=\"_blank\">$2</a>",$t);
	$t = preg_replace("!\[email=([^\]]+)\](.+)\[/email\]!Ui","<a href=\"mailto:$1\" target=\"_blank\">$2</a>",$t);
	$t = preg_replace("!\[img\](.+)\[/img\]!Ui","<img src=\"$1\" alt=\"\" border=\"0\">",$t);
	$t = preg_replace("!\[(/?[biu])\]!mi","<$1>",$t);
	$t = preg_replace("!\[color=([^\]]+)\]!mi","<font style=\"color: $1;\">",$t);
	$t = preg_replace("!\[size=([^\]]+)\]!mi","<font style=\"font-size: $1px;\">",$t);
	$t = preg_replace("!\[/(?:color|size)\]!i","</font>",$t);
	//$q1 et $c1 sont à personnaliser...
	$q1 = "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody><tr><td><span style=\"font-size : 11px\"><b>";
	$q2 = "</b></span></td></tr><tr><td style=\"font-family: Verdana, sans-serif; font-size: 11px; color: #444444;	background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-width: 1px\">";
	$q3 = "</td></tr></tbody></table>";
	$t = preg_replace("!\[quote=([^\]]+)\](.+)\[/quote\]!Umi","$q1 $1 a écrit :$q2 $2 $q3",$t);
	$t = preg_replace("!\[quote\](.+)\[/quote\]!Umi","$q1 Citation : $q2 $1 $q3",$t);
	$c1 = "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody><tr><td style=\"font-family: TimesNewRoman, sans-serif; font-size: 11px; color: #444444;	background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-width: 1px\">";
	$t = preg_replace("!\[code\](.+)\[/code\]!Umi","$c1 $1 $q3",$t);
	$t = preg_replace("!\[list\](.+)\[/list\]!Umi","<ul> $1 </ul>",$t);
	$t = preg_replace("!\[\*\](.+)(?=(\[\*\]|</ul>))!Umi","<li>$1</li>",$t);
	return $t;
}
?>

Conclusion

Ce code peut paraitre banal, mais j'en ai cherché ici je trouvais que sur le forum, et encore certains trucs m'ont pas paru top dans la source concernée (plutôt bizarre niveau regex, et ne gérant pas [list] et [email])

A venir, listes ordonnées et coloration syntaxique dans la balise code.

Dans le zip se trouvent un fichier .php complet qui permet de tester, ainsi qu'un .txt bidon et bariollé pour voir si tout fonctionne bien.

Soyez indulgents, j'ai commencé le php ya 3 jours lol :p
Tout commentaire est néanmoins le bienvenu =)

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Anthomicro le 16/03/2005 13:10:30

Salut :-)

Justement je me suis réalisé une petite fonction de colorisation syntaxique perso pour la V3 de mon site, je verrai pour la poster quand elle sera aboutie :-)

a ++

signaler à un administrateur
Commentaire de fuckya le 16/03/2005 13:24:44

anthomicro, si cest pour colorier du code, jen ai trouvé une bien ;)

signaler à un administrateur
Commentaire de Anthomicro le 16/03/2005 14:40:34

Bah je l'ai faite moi-même ma fonction qui colorie le code, bon pour php t'as la fonction highlight_string pour une chaîne, mais bon je me suis fait un petit code qui colorie le JS, HTML, PHP, C++ et VB

signaler à un administrateur
Commentaire de PaDa le 16/03/2005 18:08:10

ok j'attends de voir ca avec impatience =]

signaler à un administrateur
Commentaire de Jayadeva le 17/03/2005 20:36:07

Et pour les balises qui se chevauches????
Il va y avoir un pitit problème non?

signaler à un administrateur
Commentaire de PaDa le 17/03/2005 21:01:51

qui se chevauchent ? aucun pb de parsing a priori si le texte d'entrée est valide... je peux me tromper, fournis un exemple ;) (selon les spécifications sur pbpbb.com, c'est pas au module de remplacement a vérifier la validité de l'entrée, c'est a l'auteur de l'entrée :))

signaler à un administrateur
Commentaire de malalam le 18/03/2005 16:24:54 administrateur CS

D'ou pub pour mon script lol :
http://www.phpcs.com/code.aspx?ID=30110
qui se charge lui de verifier qu'un texte contenant du bbcode soit bien forme.

Au passage, PaDa, pourquoi n'utilises tu pas un tableau de motifs ? preg_replace() les accepte (tout comme str_replace).

signaler à un administrateur
Commentaire de PaDa le 18/03/2005 17:40:14

exactly ;) ton code m'a paru compliqué j'avoue, pour les tableaux je vais voir ca, ca sera certainement plus joli (j'm'en suis un peu servi avec des array_map sur ma source d'après, j'découvre héhé ^^)

signaler à un administrateur
Commentaire de malalam le 18/03/2005 17:46:35 administrateur CS

A moi aussi il parait un peu complique lol...et il subsiste encore quelques bugs malheureusement, je viens de voir ca :-( Mais je vais debugger ca tranquille!

Pour les tableaux : ben oui, et puis c'est pas tres complique a utiliser, dans ton cas.
A mon avis tu peux meme limiter encore le temps d'execution :
toutes les balises simples ([url],[code]...) que j'oppose aux balises plus complexes ([url = ...]), tu peux utiliser str_replace() (avec 2 tableaux), c'est plus rapide. Et reserver ensuite un preg_replace() (avec tableau encore lol) pour les tags restants. [url =...] ne sera pas touche par str_replace() puisqu'il ne prendra en compte que [url].

signaler à un administrateur
Commentaire de Anthomicro le 18/03/2005 17:58:50

Non, pas de str_replace, si tu ne fermes pas la balise essaie avec un str_replace, bonjour le code html après, sans compter le défaçage du site...

signaler à un administrateur
Commentaire de malalam le 18/03/2005 18:10:04 administrateur CS

le str_replace() ne touchera pas une balise [url = ...]. Pas de soucis de ce cote la. Pour ca il faut ensuite une regex. Mais il ne bousillera rien puisqu'il n'y touchera pas. Dans ton tableau st_replace tu auras [url], et non pas [url
?
Et evidemment il faut verifier que le code soit bon avant...

signaler à un administrateur
Commentaire de Anthomicro le 18/03/2005 18:34:54

Voilà, faut vérifier que çe soit bon, et là ça prend du temps, contrairement aux regexs :-)

signaler à un administrateur
Commentaire de kishkaya le 05/05/2005 14:27:50

tout d'abord merci pada pour tout ca, j'ai deux trois truc a rajouter :
un
   $a = stripslashes($a);
avant le
   echo "<p> $a </p>";
permet de pas avoir les "l\'url"
apres j'aurais mis pour [size] :
$t = preg_replace("!\[size=([^\]]+)\]!mi","<font size=$1>",$t);
plutot que d'utiliser le style en px (car si quelqu'un vous post un [size=1000] ca ruine la page)
enfin pour delirer j'ai fait une autre balise que j'avez vu sur un forum et qui m'avait plue :
//[yayou]
        $t = preg_replace("/(\[yayou\])(.*?)(\[\/yayou\])/i", "<table cellpadding=0

cellspacing=0 border=0><tr><td align=center valign=bottom><img

src='icons/pancarte_haut.gif'></td></tr><tr><td align=center

style='border: 1px solid #333333;'>\\2</td></tr><tr><td align=center valign=top><img

src='icons/yayou.gif'></td></tr></table>", $t);

on adapte soi meme ses images, un exemple sur http://pagesperso.laposte.net/profil/balises.php (ca restera pas longtemps) a tester avec [yayou]votre message[/yayou] .

Voila =) merci encore pour tout ca (;

signaler à un administrateur
Commentaire de groniar le 20/10/2005 13:44:38

salutation , merci pour cette petite source , mais j'ai un probleme lorsuqe je tente d'inseré la balise [center]

comment dois je m'y prendre stp ?
merci

signaler à un administrateur
Commentaire de PaDa le 20/10/2005 13:56:19

$t = preg_replace('!\[center\](.*)\[/center\]!','<div align="center">' . $1 . '</div>',$t);

Au début, ca ca doit fonctionner. Enjoy :)

signaler à un administrateur
Commentaire de OyyoDams le 30/05/2006 09:50:01

Très bien ce code. Par contre pour la gestion des [quotes] imbriqués, il faut l'appeler plusieurs fois. Voici un exemple de solution:
do
{
  $previousmsg=$msg;
  $msg=BBtags($msg);
} while ($previousmsg!=$msg);

signaler à un administrateur
Commentaire de HenvimaL le 05/06/2006 21:05:01

Salut j'ai un gros souci !!!! lol jviens enfin de comprendre pk ca déconnait.

J'ai plusieurs lignes avec des textes en bbcode enregistré dans une table MYSQL. J'affiche chake ligne de texte en faisant un WHILE ca permet de les faire défiler. Et bref pour convertir mon bbcode en HTML j'inclu dans le WHILE la fonction BBtags. Il l'accepte pas au bout du 2eme texte affiché en gros il aime pas répéter la fonction BBtags plus de 2 fois.

Fatal error: Cannot redeclare bbtags() (previously declared in c:\easyphp\www\ibdm\replace.php:4) in c:\easyphp\www\ibdm\replace.php on line 4

Quelqu'un peut m'aider cimer ...

signaler à un administrateur
Commentaire de PaDa le 06/06/2006 14:46:43

@ HenvimaL : Tu as du mettre un "include" dans le fichier où est stocké la fonction. Ce fichier est ré-inclus à chaque fois, et php voit que tu essaies de RE-définir la fonction, donc il aime pas. Soluce : tu remplaces par un "include_once", ou mieux, tu sors l'include de ton "while", tu le fais avant, une seule fois, et ca marchera nickel : la fonction sera bien déclarée une seule fois et ca devrait mieux marcher.
A noter que tu peux aussi enregistrer tout ton texte, puis appeler bbtags() sur tout le texte une seule fois.

@ OyyoDams : yep, merci pour le commentaire, en fait les quotes imbriqués doivent fonctionner pour peu qu'ils soient dans le même ordre que le code a priori :/ (avec auteur, sans auteur) Je n'ai pas vraiment le coeur à corriger ca, si ta soluce fonctionne c'est nickel ;)

signaler à un administrateur
Commentaire de PaDa le 06/06/2006 14:48:52

** : un include DU fichier ou est stocké la fonction. (pardon pour le double post)

signaler à un administrateur
Commentaire de kegi le 08/08/2006 02:29:18

un grand merci pour ce bout de script assez utile ;)

Cordialement,
Kevin (kegi@hotmail.com)

signaler à un administrateur
Commentaire de Also know as le 01/05/2007 00:37:52

Salut tout le monde,

J'avais crée ce style là en utilisant plein de preg_replace, mais je trouve que c'est lourd mais que c'est lourd...
J'avoue j'ai pas cherché à crée mieux depuis car je n'en ai plus eu l'utilité et je n'y connaissais pas grand chose à l'époque.

Mais sérieusement y'a pas "un truc" pour simplifier ca ?
Faire cela, devient très vite lourd pour la page, ca se verra peut-être pas à vu d'oeil, mais bon on prend "t" on lui attribue une nouvelle chaine en remplaçant ceci par cela, PUIS on reprend le nouveau "t",et on recommence, etc.
Perso je trouve qu'a la fin ben le "t"...il à souffert le pauvre, vous croyez pas ?

signaler à un administrateur
Commentaire de PaDa le 01/05/2007 01:08:04

Je pense pas que le $t souffre trop ;)
En revanche, chainer ainsi les preg_* c'est pas forcément très efficace pour traiter un gros fichier.
Je vous conseille, si vous avez peur de trop faire souffrir votre distrib PHP, de se servir de cette fonction juste une fois pour transformer la chaine, et de stocker la chaine transformée...

Cheers

signaler à un administrateur
Commentaire de Also know as le 02/05/2007 17:27:44

Ca c'est pas bête !
D'utiliser cette fonction juste avant de stocker le tout dans une base SQL par exemple.
Ensuite ben si vous voulez qu'on puisse modifier à nouveau le texte, il faudrait créer la fonction inverse pour faire un "edit" du texte.

Ca peut paraitre lourd, mais je pense que ca sera tout de même bien moins lourd que de rappeler cette fonction pour chaque texte.

A méditer :)

@+

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,27 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.