probleme BBCode [html] html_entity_decode

Nouveau WRInaute
Je voulait pouvoir proposer au rédacteur d'un article d'insérer du HTMl lorsqu'ils veulent par exemple insérer une vidéo ou autre embed.
Voici comment je procède:
l'auteur écrit un message qui est sécurisé par htmlspecialchars et nl2br et stocké dans la base mysql.
quand on lit le message j'utilise une fonction maison qui transforme tout les BBcode
cependant je ne parvient pas a remplacer le contenu de
HTML:
par son équivalent html:
voici ma ligne de code:
Code:
$texte = preg_replace('#\[html\](.+)\[/html\]#isU','html_entity_decode($1)', $texte);
J'ai essayer plusieurs truc mais rien a faire il veut pas me le remplacer.
avez vous une idée pour le faire ?
une fonction a utiliser ?
ou dois je après validation du formulaire de rédaction de l'article proposer à l'utilisateur de rentrer du HTML ?
 
WRInaute impliqué
Tu as regardé un peu comment font les scripts reconnus pour leur BBcode ? Je pense à phpBB notamment mais je crois que Wordpress ou Dotclear l'utilisent aussi ;)
 
WRInaute accro
Je l'ignore pour dotclear. Mais wordpress n'a pas de bbcode integré ;)

Après lorsqu'il faut y passer une fonction, je trouve que preg_replace rends le code rapidement illisible.
Ce n'est donc que mon avis personnel. Mais je te conseillerais d'utiliser preg_replace_callback.

Code:
function html_code($match) {
return html_entity_decode($match);
}

$str = preg_replace_callback('#\[html\](.+)\[/html\]#isU', 'html_code', $str);
 
Nouveau WRInaute
Merci sa marche !
alors pour ceux qui feront une recherche pour faire la meme chose que moi
voici le code sur lequel il tomberont:
Code:
Warning: html_entity_decode() expects parameter 1 to be string, array given in /mnt/119/free.fr/4/1/legarspol/legarspol/fonction.php on line 202
il suffit de remplacer
Code:
return html_entity_decode($match);
par
Code:
return html_entity_decode($match[1]);
ou un autre chiffre (sa remplace $1)
voila j'espère que sa servira à qqn d'autre
merci beaucoup car j'ai deja du fouiller dans le code de phpbb . j'ai passé 3 jour à chercher j'usqua renoncer... alors tout ces trucs la... :lol:
sinon sa fait peur !
j'aurais jamais remarquer que html_code etait une fonction avant !
et sinon j'ai pas très bien compris quel est la différence avec preg_replace tout court...
mais sa marche c'est le principale.
Merci !
 
WRInaute accro
La différence entre preg_replace et preg_replace_callback est que le premier prends une chaine de caractères pour faire le remplacement, lorsque la seconde fait appel à une fonction (ici html_code).
Tu peut ainsi plus aisément faire des choses complexes dans tes remplacements.
 
Nouveau WRInaute
Merci beaucoup pour ton aide !
et pour prelever une chaine de caractère d'une autre chaine de caractère j'utilise cet meme fonction ? qui fait appel à une autre fonction qui enregistre la chaine voulue ?
 
WRInaute accro
Si tout ce que tu veut faire, c'est récupérer une chaine, en faisant un preg_match, cela suffit clairement.
Bien que plus lisible, utiliser les callbacks utilise tout de même un tout petit peu plus de processus système.
 
Discussions similaires
Haut