Remplacement balises bbcode

Soyez le premier à donner votre avis sur cette source.

Vue 10 229 fois - Téléchargée 519 fois

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 / Exemple :


<?
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 =)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
2
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 :)

@+
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
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
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
2
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 ?
Messages postés
164
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
25 août 2008

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

Cordialement,
Kevin (kegi@hotmail.com)
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
** : un include DU fichier ou est stocké la fonction. (pardon pour le double post)
Afficher les 23 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.