[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