Accueil > weblog
- Lire le billet précédent - Lire le billet suivant -
Par Laurent Denis, le 16 août 2004.
En-tête HTTP ? Prologue XML ? Meta http-equiv ? Voici un rapide résumé commis dans le forum Webmaster-Hub, en réponse à une question sur la bonne manière de spécifier l'encodage des caractères de ses documents :
Un navigateur tente de déterminer l'encodage d'un document successivement :
meta http-equiv="Content-Type" content="...; charset=..." pour les documents HTML et les documents XHTML traités comme du HTML ;Cependant :
La "bonne pratique" serait donc :
header("Content-type: text/html; charset=ISO-8859-1"); en PHP, ou <%response.ContentType=("text/html; charset=iso-8859-1")%> en ASP. D'autres méthodes sont détaillées dans The HTTP charset parameter ;meta (systématiquement en HTML et fortement recommandée en XHTML traité en tant que HTML) ;Ce qui donne concrètement ;
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>...</title>
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>...</title>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>...</title>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>...</title>
Enfin, il faut encore que le contenu respecte effectivement l'encodage en question, ce qui dépend de l'éditeur HTML utilisé. Ceci pose souvent un problème sous Windows avec les éditeurs qui encodent parfois en Windows-1252 des documents supposés être en ISO-8859-1. On ne s'en aperçoit que lorsqu'on utilise certains caractères Windows illégaux en HTML et XHTML.
1. Le 16 août 2004 à 17:36, de Blog Alsacréations : XHTML, CSS et Standards web
Spécifier l'encodage des caractères d'un document (X)HTML
En-tête HTTP ? Prologue XML ? Meta http-equiv ? C'est une question que beaucoup se posent et Laurent Denis nous a concocté une très bon résumé des techniques à employer. Un billet intéressant à garder sous le coude....
Les trackbacks pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.
Commentaires
Fabrice Bonny, le 16 août 2004
Tiens, des bonnes pratiques d'Opquast...
Ok, ok, c'est la reprise et mon teasing est minable.
Laurent Denis, le 16 août 2004
C'est vrai qu'on attend avec impatience la publication des "mises en oeuvre" des bonnes pratiques Opquast
C'est sans d'ailleurs pour cela que l'expression m'est venue spontanéement..
glandium, le 16 août 2004
> L'en-tête HTTP ne suffit pas, car les utilisateurs n'accèderont pas forcément au document via HTTP. Il suffit par exemple qu'ils l'aient enregistré localement pour perdre l'information d'encodage
Entre nous, dans ce cas, c'est au navigateur d'être intelligent quand il enregistre...
Eric Daspet, le 16 août 2004
Je ne suis pas vraiment d'accord avec toi pour le prologue. Il reste à mon avis à conseiller pour un doc XHTML (l'histoire du box-model de msie6 n'est qu'une anecdote car de toutes façons ce box-model sera faux dans msie5 et que dans msie6 on peut le rétablir avec une simple règle CSS3 déjà implémentée).
Pourquoi ? parce que un outil XML voulant traiter le document ne se servira que du prologue, pas du méta (qui n'a de sens que pour un outil spécifique HTML). On vient donc de casser la compatibilité avec toute la chaîne XML, ce qui rend un peu inutile l'utilisation du XHTML je trouve.
Et malheureusement ce défaut se retrouve même sur les navigateurs (qui eux sont spécifiques HTML et devraient comprendre le méta) : en mode XHTML/XML, le méta n'est pas pris en compte pour déterminer le charset.
Reste l'entête HTTP, mais reste toujours le problème de la sauvegarde.
Laurent Denis, le 16 août 2004
@Eric, loin de moi l'idée de trancher pour ou contre le prologue XML ! Mon idée était simplement de mentionner l'un des facteurs de choix les plus souvent en cause. Mais j'aurais dû, en effet, indiquer le revers de la médaille.
Pour ma part, j'utilise ce prologue, pour la raison que tu indiques, sachant que, côté CSS, je m'efforce de faire des feuilles qui soient indifférentes au box-model ou qui s'accomodent de l'un comme de l'autre.
Laurent Denis, le 16 août 2004
Tiens, j'avais hésité à donner deux exemples pour XHTML, avec et sans le prologue, selon l'orientation HTML ou XML choisie... C'est fait.
Raphaël Wils, le 16 août 2004
Eric->"dans msie6 on peut le rétablir avec une simple règle CSS3 déjà implémentée"
Voila qui est interessant. On peut avoir des précisions ? un lien ?
Laurent Denis, le 16 août 2004
@Raphaël : c'est la propriété box-sizing, utilisable dans Mozilla, Opera 7, Explorer 5Mac... Mais pas IE6.0 Win
- Mode Microsoft : box-sizing: border-box
- Mode Standard: box-sizing: content-box
Voir:
- www.w3.org/TR/css3-box/#t...
- www.quirksmode.org/css/bo...
Eric Daspet, le 17 août 2004
pas MSIE6/win ?
Damned, je croyais le contraire (pas dans mozilla mais présent dans MSIE). J'ai du me tromper, désolé alors pour la fausse info.
Je croyais pourtant qu'il y avait une astuce CSS du type dans MSIE. Va falloir que je revoie mes classiques.
@Raph: ceci dit tu as toujours les hacks CSS (même si perso je n'aime pas trop, on a vite fait de s'y perdre) ou comme dit Denis : faire un design où le box-model n'influe pas de manière importante.
Laurent Denis, le 17 août 2004
Pour utiliser box-sizing dans IE Win, il faut encore une couche supplémentaire de hacks. Par exemple :
- webfx.eae.net/dhtml/boxsi...
- dean.edwards.name/IE7/
Beaucoup de bruit pour peu de choses, AMHA.
Raphaël Wils, le 17 août 2004
Je crois que je vais rester à une méthode simple pour le cas ou la taille est importante : un div sans margin ni padding avec le width qui va bien dans lequel se trouve le contenu avec tout les margin et padding que je veux.
Gloom, le 19 août 2004
Et bien, beaucoup de mes sites sont à mettre à jour à ce niveaux là...
Je crois que, du moins, dans un premier temps, je vais revenir en arrière et faire du (x)html en temps qu'html et pas en temps que document XML...
florent Claude, le 04 février 2005
tip-top les explications sur la détection de l'encodage.
ça faisait un moment que j'essayais un peu tout pour que mon navigateur reconnaisse le bon encodage!
en fait, il manquait juste la ligne php qui spécifie l'encodage dans l'entête http...
merci/.
Les commentaires pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.