Zeph Le 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.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Uther Le 25/09/2008 à 08:14 Je suis absolument pas un expert HTML mais <?xml version="1.0" encoding="windows-1252"?> agit il avec le même niveau de priorité que la balise méta?
Et certains navigateurs se comportent différemment.
Mais effectivement, la spec dit que le serveur a toujours raison, peut-être aussi pour des raisons de performance, mais il est clair que c'est peu pratique malheureusement.
Ymox Le 25/09/2008 à 10:37 C'est - hélas ! - le header qui prime, oui.
[mode="HS"]J'en ai fait l'expérience malheureuse avec mon hébergeur qui lance un header charset: ISO-8859-1 pour TOUTES leurs pages, alors que je codais bien tranquilement en utf-8… Là, je pense qu'il y a quelque chose à revoir.[/mode]

Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?
Spipu Le 25/09/2008 à 11:01 assez interessant comme remarque, et ca éclair quelques problèmes que j'ai eu à un moment !
ça coute vraiment plus cher un fichier php qui contient que du html?
Zeph Le 25/09/2008 à 12:45 beaucoup plus cher non, plus cher oui puisqu'il faut quand même appeler le parseur php qui va se taper tout le fichier à la recherche d'un "<?php" inexistant pour finalement retourner le contenu de la page à l'identique

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
RHJPP Le 25/09/2008 à 20:27 Ça me semble compréhensible que ce soit l'encodage défini dans l'entête HTTP qui doit être utilisé.
Comment le navigateur peut faire pour lire la page et trouver le bon encodage si l'encodage qu'il utilise pour lire n'est pas bon ?
Si ton entête HTTP indique un truc du genre UTF-16, si le navigateur arrive à lire dans la page qu'il doit utiliser un autre encodage, c'est qu’à priori, il utilise déjà le bon... Et si l'encodage défini dans la page est bon, mais pas celui de l'entête, alors ce bon encodage risque de ne pas être trouvé.
(d'ailleurs, je n'ai jamais bien compris l'intérêt de l'UTF-16 et de l'UTF-32... pour une fois qu'on avait l'occasion de faire une nouvelle norme propre, on nous en pond 3, histoire d'être sûr d'avoir toujours une source d'incompatibilité...)

<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
le meta c utile qunad le charset est pas declare dans le content-type (cad souvent) et donc le browser (c a lui de rendre et de prober le charset) utilise le meta, ou se demerde pour le trouver
ouep, et ca ct enfin un bon move de PHP (qui fait donc comme Python)
moué, enfin, c'est pas encore fait... déjà, PHP 5.3 qui pointe le bout de son nez petit à petit...
... et après, seulement, PHP 6...
oue enfin; si les devs de php assuraient une certaine compatibilite entre les versions; y'aurait surement plus de personnes avec les dernieres updates etc.
Uther Le 29/09/2008 à 13:46 Ca reste a prouver Java a beau avoir une excellente compatibilité, Je suis étonné du nombre de projets restent en version 1.4