[PHP-JS] htmlentities ne fonctionne pas après str_replace
Bonjour
Je ne comprend rien à mon script : il fonctionne, mais c'est illogique ou en tout cas je ne comprend pas quelque chose.
Voilà :
Je reçois des données d'un formulaire, je filtre :
Code:
1 2 3
|
$contenu=htmlentities($_POST['contenu']);
$contenu=stripslashes($contenu); |
Comme c'est pour un éditeur de texte, je remplace le bbCode maison par du html :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $contenu=nl2br($contenu);
$contenu=str_replace("<br />", "<br>", "$contenu");
//idem pour la balise en gras
$contenu=str_replace("", "<b>", "$contenu");
$contenu=str_replace("", "</b>", "$contenu");
//idem pour l'italique
$contenu=str_replace("", "<i>", "$contenu");
$contenu=str_replace("", "</i>", "$contenu");
//idem pour les citations (l'espace entre" et > dans la div permet de le distinguer du "> pour les liens juste en dessous ( je sais c'est foireux, mais ça fonctionne, donc en attendant...)
$contenu=str_replace("[citer]", "<br><b>citation:</b><br><div class=\"citer\">", "$contenu");
$contenu=str_replace("[/citer]", "</div>", "$contenu");
//idem pour les liens (on prend en compte la répétition des http et la position des deux premières lignes doit etre conservées
$contenu=str_replace("[a="http://", "<a href=\"http://", "$contenu");
$contenu=str_replace("[a="", "<a href=\"http://", "$contenu");
$contenu=str_replace(""]", "\"target=\"_blank\"\">", "$contenu");
$contenu=str_replace("[/a]", "</a>", "$contenu"); |
Ensuite comme j'envoie le contenu dans un champ hidden je le refiltre comme ça :
Code:
$contenu=htmlentities($contenu);
Si je ne filtre pas ainsi juste à la fin, ça s'affiche dans la page et ça foire.
Ensuite j'envoie dans la base et je ne filtre PLUS RIEN à l'exception d'un mysql_real_escape_string qui n'a pas de rapport ici.
Alors ma question :
Puisque je fais un $contenu=htmlentities($contenu) en bout de course, comment ce fait-il que les balises html créées par les str_replace ne soit pas désactivées, alors que les autres caractères spéciaux, par exemle &<, le sont ?
Car je le répète tout s'affiche bien, mais quand j'ai fait ça j'ai du le faire au petit bonheur la chance et là je ne pige plus du tout.
Merci pour vos explications si vous en avez.