Ouéééé encore un billet de geek ! (Ça veut dire que si vous êtes non-geek, vous ne comprendrez qu'un mot sur deux, et encore, les autres paraîtront des gros mots)

Vous pestez, vous avez votre document HTML en UTF-8, vous avez bien mis la ligne suivante :

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

Et pourtant, non, ça veut pas, vous avez toujours è à la place de è, ou é à la place de é ou encore î à la place de î. Ça vous emmerde, vous n'avez certainement pas envie de remettre (respectivement) des &egrave;, &eacute;, ou &icirc;, et laisser ces entités là où elles étaient, à savoir au placard.

Si vous regardez les headers HTTP de réponse (grâce à l'excellente Web Developer Extension), vous voyez ça :

Content-Type: text/html; charset=ISO-8859-1

Or, il est vrai, cela force l'interprétation du charset; cette information a priorité sur celle définie dans la page (et j'avoue que je ne comprends pas vraiment pourquoi, la logique aurait plutôt voulu l'inverse, selon moi).

Il se trouve qu'Apache, par défaut[1], et pour des raisons obscures qui n'ont rien à voir, configure la propriété suivante :

AddDefaultCharset On

Il suffit de la changer en Off, ou bien d'ajouter AddDefaultCharset Off dans votre .htaccess.

Attention, si un Apache joue le rôle de Reverse-Proxy chez vous (c'est le cas chez moi), il faudra aussi changer ça chez lui.

Notes

[1] Ou alors, c'est Debian