begin process at 2012 02 15 13:29:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > REMPLACEMENT BALISES BBCODE

REMPLACEMENT BALISES BBCODE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caratère Niveau :Débutant Date de création :15/03/2005 Vu / téléchargé :9 028 / 422

Auteur : PaDa

Ecrire un message privé
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip COULEURS MIRC -> HTML [BIS]

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

Commentaires et avis

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 ++

Commentaire de fuckya le 16/03/2005 13:24:44

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

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

Commentaire de PaDa le 16/03/2005 18:08:10

ok j'attends de voir ca avec impatience =]

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?

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

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

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é ^^)

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].

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

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

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

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 (;

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

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

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);

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

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 ;)

Commentaire de PaDa le 06/06/2006 14:48:52

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

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)

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 ?

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

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

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,404 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales