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.
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...
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 ?
@ 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 ;)
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
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);
tout d'abord merci pada pour tout ca, j'ai deux trois truc a rajouter :
un
$a = stripslashes($a);
avant le
echo " $a
";
permet de pas avoir les "l\'url"
apres j'aurais mis pour [size] :
$t = preg_replace("!\[size=([^\]]+)\]!mi","",$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", ", ----
\\2, ----
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...
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].
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é ^^)
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 :))
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
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 :-)
2 mai 2007 à 17:27
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 :)
@+
1 mai 2007 à 01:08
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
1 mai 2007 à 00:37
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 ?
8 août 2006 à 02:29
Cordialement,
Kevin (kegi@hotmail.com)
6 juin 2006 à 14:48