[Linux-bruxelles] encodage de caractère php

Frederic Peters fpeters at entrouvert.com
Jeu 20 Avr 12:03:44 CEST 2006


Gaëtan Frenoy écrivait :

>  D'après un coup d'oeil rapide, je regarderais du côté
>  du paramètre "charset" de htmlentities.

Bien vu, traité ça en privé avec Miguel, copie ci-dessous:



        Frédéric


Le problème était le suivant :

- page déclarant
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  ce qui entrait déjà en conflit avec l'entête HTTP positionné.

Première étape était donc de convertir le fichier PHP en UTF-8, facile :
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
puis
    recode latin1..utf8 index.php

Le fichier ainsi servi, en remplissant une ligne, on peut constater
dans le fichier signatures.dat la ligne suivante :

  <tr><td>Frédéric</td>...

Ainsi donc deux choses :

 1) le fichier signatures.dat contient le code déjà formatté ligne de tableau
    HTML (j'en aurais plutôt fait un fichier CSV)
 2) il utilise des entités HTML Ã etc.

Mais ces entités sont mauvaises, elles ont été appliquées à une chaine
UTF-8 considérée comme une chaine iso-8859-1, ça donne donc le Frédéric
plutôt que le Frédéric (qui aurait été Fr&eacture;déric).

Là, deux options possibles, la première est de trouver comment
spécifier à la conversion en entités HTML que la chaine de départ est
en UTF-8.  Aucune idée.  La seconde est de réaliser que l'utilisation
d'entités HTML n'est pas nécessaire, que le charset étant par ailleurs
correctement déclaré, des caractères de ce charset peuvent se trouver
dans le fichier.

Il reste alors à supprimer les appels à htmlentities(...) et le tour
est joué.





Plus d'informations sur la liste de diffusion Linux-bruxelles