8791 sujets

Développement web côté serveur, CMS

Mais pas IE!

Bonjour à tous.
Alors voilà mon souci.

Mon appli utilise une base CouchDb pour stocker ses données, qui doivent donc être encodées en UTF-8. J'utilise le framework Zend, sur serveur Xampp sous Windows.

J'ai bien dit à php d'utiliser l'UTF-8 ("mb_internal_encoding( 'UTF-8' );" au début de l'appli).
J'ai bien indiqué le bon doc type au début de la page (<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">), avec l'encodage UTF-8.
J'ai aussi positionné l'attribut accept-charset="UTF-8" pour les formulaires.

Résultat: je reçois bien les bons caractères accentués avec IE, ils sont transformés comme je m'y attends partout, tout va bien.
Avec FF et Safari, rien ne va plus.
Je viens de vérifier avec FireBug que je recevais bien les bonnes données ('éè' par exemple) en surchargeant la méthod isValid de Zend_Form, mais lorsque Zend me réaffiche mon formulaire, au lieu de "&eacute;&egrave;" (avec IE), j'obtiens "&Atilde;&copy;&Atilde;"
Il semblerait que Zend_Form fasse un html_entities sur le contenu des données envoyées, mais la convertion n'est pas bonne depuis Firefox et Safari.
J'ai fait un mb_detect_encoding sur les valeurs reçues, et c'est bien de l'UTF-8.
Alors voilà, je suis perdu.

Je ne comprends pas comment "é" devient "&Atilde;&copy;" avec FF et Safari et "&eacute;" avec IE, alors que les données reçues semblent pourtant identiques et correctes.

Au secours! SVP! Smiley biggol Smiley biggol
Notepad++ m'indique ANSI, mais il me dit la même chose pour les fichiers Zend...
Faut-il que je convertisse tous mes fichiers, ceux de Zend inclus?
Si oui, y'a-t-il un utilitaire qui permettrait de le faire par lot?
Pour répondre à ma propre question, une partie du problème tient au fait que htmlentities n'utilise pas le charset défini par mb_internal_encoding, mais l'ISO-8859-1, à moins de lui passer comme troisième paramètre un autre charset.
Le plus simple est d'utiliser htmlspecialchar.
On peut utilement se référer à http://pear.php.net/bugs/bug.php?id=5886