Exclure les <br /> de htmlentities

Eléphanteau du PHP | 32 Messages

03 avr. 2009, 11:24

Bonjour,

Je suis face à un problème que je n'arrive pas à résoudre.

En effet, sur un site, travaillant sous UTF-8 (niveau pages, code, et base de données), je dois afficher une page au format ISO-8859-1 car elle est destinée à un service externe ne gérant pas l'UTF-8.

J'ai donc en base de données, des données au format UTF-8 qui sont saisies par des utilisateurs pouvant comprendre du HTML, ex :
Héhé <br>saut de ligne<br>haha<br>hô hô<br>
Ma problématique, est que sur la page affichant ces données en ISO, il faudrais non seulement que ces données soient converties en ISO mais qu'en plus que les caractères spéciaux HTML soient utilisés.

Par exemple, si je reprend la chaine au dessus, mon résultat devrait être :
H&eacute;h&eacute; <br>saut de ligne<br>haha<br>h&ocirc; h&ocirc;<br>
J'ai tenté de passer par htmlentities, mais le soucis c'est que mes <br> sont évidemment converti en texte...

Comment pourrais-je effectuer la conversion des caractères spéciaux, puis un utf8-decode sans casser le code HTML présent dans les chaînes ?

J'ai pensé a une regex mais hélas je n'y connais quasiment rien...

Avez-vous une piste ?

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 avr. 2009, 11:34

Pourquoi ne pas simplement restaurer les balises <br /> avec un str_replace() après ton traitement ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 32 Messages

03 avr. 2009, 11:39

Oui en effet je viens de penser à cette solution, je ne vois pas pourquoi j'y ai pas pensé plus tôt !

Aussi, j'avais dans l'idée de faire une sorte de br2nl avant et un nl2br après mais c'est bête !

Merci