[PHP/HTML] PHP et caractères spéciaux du HTML

Salut…

Je suis un peu en train de me battre avec les fonctions PHP qui permettent de remplacer des caractères spéciaux (é,à,<,>,&," etc) par leur code (&eacute;,&lt;&quote; etc) et inversement.

Sur mon site, avant de les rentrer dans la base SQL, je passe systématiquement tout texte rentré dans un formulaire avec :

nl2br() (uniquement si c’était dans un textarea) puis htmlentities(ENT_QUOTES)

Ainsi un texte comme ceci :
[cpp]
page spéciale
[/url][/cpp]
va devenir :
[cpp]&lt;a href=&quot;page.php?a=1&amp;p=2&quot;$gt;
page sp&eacute;ciale
&lt;/a&gt;[/cpp]

Ensuite sur certaines de mes pages, je veux inhiber le code HTML contenu dans ces champs, donc il me suffit de l’afficher tel quel.

echo $txt;[cpp]&lt;a href=&quote;page.php?a=1&amp;p=2&quote;$gt;page sp&eacute;ciale&lt;/a&gt;[/cpp]Affichage : page spéciale[/url] (sur le page HTML)

Mais sur d’autres pages, je tiens à ce que le code HTML soit interprété.[cpp]page sp&eacute;ciale[/url][/cpp]Affichage : page spéciale

Je ne vois pas comment faire ça car seulement certains caractères doivent changer (ceux correspondant aux balises), et les autres (texte ou placés entres guillemets), doivent rester codés.

Si j’utilise des fonctions PHP existantes, elles font tous les changements donc ça marche mais ce n’est pas très propre car un “é” va apparaitre comme ça dans le code au lieu d’apparaitre en “&eacute;”, de même pour un “&” qui ne sera pas un “&amp;” et donc les normes W3C ne seront pas respectées… :confused:

Je ne sais pas si j’ai été clair, mais c’est un problème qui me prends un peu la tête ! :pt1cable:

les fonctions PHP :

htmlspecialchars : convertit les &, <, > et éventuellement ’ et "
htmlentities : idem que htmlspecialchars avec en plus tous les caractères accentués
html_entity_decode : inverse de htmlentities

J’utilise htmlentities, puis html_entity_decode (mais qui ne me convient pas parfaitement étant donné qu’elle remplace TOUS les caractères et non pas seulement ceux dont j’aurais besoin).

Je vais peut être devoir réécrire une fonction (ça me parait un peu compliqué) ou bien procéder différement…:??:

Tu sais, pour les caractères accentués il suffit juste de dire que la page est en ISO-8859-1 et pas en UTF-8. C’est ce que je fais personnellement, et je me casse pas la tête à convertir é en &ecute;

Ah je ne savais pas… mais ça règle pas mon problème…

[cpp]$machin=htmlspecialchars(’ [/url]’);
echo $machin;
//&lt;a href=&quot;?a=1&amp;p=1&quot;&gt; &lt;MACHIN&gt; &lt;/a&gt;
echo html_entity_decode($machin);
//
[/url][/cpp]
Mais la norme voudrait que le code soit ainsi :[cpp]//
&lt;MACHIN&gt; [/url][/cpp]
Je ne vois vraiment pas de solution :confused:
à part utiliser des BBCodes plutôt que du HTML… mais ça demande beaucoup de travail. [:kamaga]

ah, je vois. Pour ça faudrait parser ton document, et ça serait plus lourd. tu as aussi strip_tags pour supprimer les tags indésirables, mais sinon c’est très limité.

Le bbcode est plus simple à ce niveau (preg_replace, etc)