ZephLe 25/09/2008 à 01:26
J'ai une petite question qui me taraude, ça touche autant au protocole HTTP qu'au langage HTML mais il me semble qu'il n'y a pas de catégorie mieux adaptée pour ce topic.
Vous savez déjà que quand on accède à une page HTML avec un navigateur web, l'information sur l'encodage peut venir de deux endroits différents :
- De l'en-tête HTTP, avec l'instruction "Content-Type" (par exemple "Content-Type: text/html; charset=UTF-8
")
- De l'en-tête HTML, avec la balise "<meta>" (par exemple <meta http-equiv="Content-Type" content="application/xhtml+xml;charset=UTF-8" />)
Ce qui m'étonne c'est que dans le cas où les deux informations sont présentes et contradictoires (l'une indique UTF-8 et l'autre Latin-1 par exemple), les navigateurs semblent donner priorité à celle de l'en-tête HTTP. Je viens de vérifier sous Firefox, Internet Explorer, Opera et Chrome : même résultat. Pourtant ça me parait stupide pour au moins deux raisons :
- Une logique : c'est quand même la page qui est le mieux placée pour savoir comment elle est encodée. Peu importe ce que le serveur indique, si la page prend la peine de re-spécifier le header il y a beaucoup de chances pour que ce soit le bon.
- Une pratique : j'ai un serveur (Apache) qui spécifie par défaut (en l'absence de .htaccess) un charset UTF-8 quand il répond à une requête. Si j'accède à une page HTML encodée en Latin-1 qui précise dans son en-tête et via une balise <meta> qu'elle est encodée en Latin-1, mon navigateur va quand même considérer qu'elle est en UTF-8 et donc me l'afficher n'importe comment.
Est-ce que vous connaissez la raison qui justifie ce comportement ? Puisqu'il se retrouve dans tous les navigateurs que j'ai testés, je suppose qu'il est standard et qu'il y a une explication logique, mais pour l'instant ça me parait surtout pas très pratique.