'>

Les codages de caractères au HTML

HTML (Hypertext Markup Language) a été en usage depuis 1991, mais HTML 4.0 ( Décembre 1997) était la première version standardisée où les caractères internationaux ont reçu un traitement assez complet . Quand un document HTML contient des caractères spéciaux en dehors de la gamme de sept bits ASCII deux objectifs sont à considérer : l'intégrité de l' information, et l'affichage du navigateur universel.

Spécification de caractère l'encodage du document

Il ya plusieurs façons de spécifier le codage de caractères est utilisé dans le document. Tout d'abord, le serveur Web peut inclure le codage de caractères ou " charset" dans le Transfer Protocol (HTTP) en-tête Content-Type hypertexte , qui seraient normalement ressembler à ceci: [1]

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

Cette méthode donne le serveur HTTP un moyen pratique pour modifier l'encodage de documents en fonction de la négociation de contenu , certains logiciels de serveur HTTP peut le faire, par exemple Apache avec le module mod_charset_lite [2] .

Pour HTML, il est possible d'inclure cette information dans l'élément de tête vers le haut du document : [3]

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

HTML5 permet également la syntaxe suivante pour dire exactement la même chose : [3]

<meta charset="utf-8">

Les documents XHTML ont une troisième option : exprimer le codage de caractères via déclaration XML , comme suit : [4]

<? xml version = "1.0" encoding = "ISO- 8859-1" ? >

<meta http-equiv="Content-Type"> peut être interprété directement par un navigateur, comme une balise HTML ordinaire , [citation nécessaire] ou il peut être utilisé par le serveur HTTP pour générer des en-têtes correspondants quand il sert le document. [ 5] la spécification HTTP/1.1 d'en-tête d'un document HTML doit étiqueter un encodage approprié dans l'en-tête Content-Type [6], manquant charset = résultats de paramètres dans l'acceptation de la norme ISO -8859-1 (donc HTTP/1.1 officiellement n'offre pas de telles option comme un codage de caractères non spécifié) , et cette spécification remplace tous les fichiers HTML (ou XHTML) ceux des éléments de métadonnées. Cela peut poser un problème si le serveur génère un en-tête incorrect et on n'a pas l'accès ou les connaissances nécessaires pour les modifier.

Comme chacune de ces méthodes expliquer au récepteur comment le fichier envoyé doit être interprété , il serait inapproprié que ces déclarations ne pas correspondre à l'encodage de caractère réel utilisé . Comme un serveur habituellement [citation nécessaire] ne sait pas comment un document est codé en particulier si les documents sont créés sur différentes plates-formes ou dans les différentes régions , de nombreux serveurs [citation nécessaire] il suffit de ne pas inclure une référence à la " charset" dans le contenu -Type tête , évitant ainsi de fausses promesses. Cependant , si le document ne précise pas l'encodage soit , cela peut entraîner la non moins mauvaise situation où l'agent utilisateur affiche Mojibake car il ne peut pas savoir quel encodage de caractères a été utilisé. En raison d'une ignorance généralisée et persistante de HTTP charset = sur Internet (à son côté serveur) , Consortium WWW déçu par l ' HTTP/1.1 approche stricte [7] et encourage les développeurs de navigateurs à utiliser quelques corrections , en violation de la RFC 2616.

Si un agent utilisateur lit un document sans aucune information de codage de caractères , il peut se replier à l'aide d'une autre information. Par exemple, il peut s'appuyer sur les paramètres de l'utilisateur , que ce soit à l'échelle navigateur ou spécifique pour un document donné , ou il peut choisir un encodage par défaut en fonction de la langue de l'utilisateur . Pour les langues d'Europe occidentale , il est typique et assez sûr de supposer Windows 1252, qui est similaire à la norme ISO -8859-1 , mais a des caractères imprimables en place de certains codes de contrôle. La conséquence du choix mal est que les caractères en dehors de la plage ASCII imprimables (32 à 126) apparaissent généralement de manière incorrecte. Cela pose quelques problèmes pour les utilisateurs anglophones , mais d'autres langues régulièrement dans certains cas, toujours - besoin caractères en dehors de cette fourchette. Dans les environnements CJK où il ya plusieurs différents encodages multi-octets en cours d'utilisation , la détection automatique est également souvent utilisé . Enfin , les navigateurs permettent généralement l'utilisateur de remplacer étiquette charset incorrect manuellement.

Il est de plus en plus commune pour les sites multilingues et des sites Web dans des langues non -occidentales d'utiliser UTF-8 , ce qui permet d'utiliser le même codage pour toutes les langues . UTF-16 ou UTF-32 , qui peut être utilisé pour toutes les langues , ainsi , sont moins largement utilisés car ils peuvent être plus difficiles à gérer dans les langages de programmation qui supposent un encodage de super- ASCII orienté octet , et ils sont moins efficaces pour le texte avec une fréquence élevée de caractères ASCII , ce qui est généralement le cas pour les documents HTML .

Succès visualisation d'une page n'est pas nécessairement une indication que son codage est spécifié correctement . Si le créateur et le lecteur de la page sont tous deux en supposant un codage de caractère spécifique à la plateforme , et le serveur n'envoie aucune information d'identification , le lecteur sera néanmoins voir la page en tant que créateur prévu, mais d'autres lecteurs sur différentes plates-formes ou avec différentes langues maternelles ne verra pas la page comme prévu.
Les références de caractères
Principaux articles : référence d'entité de caractère et de référence de caractère numérique
Il a été suggéré que le HTML rendu caractère décimal être fusionnés dans cet article. (Discuter) proposées depuis Septembre 2012.

En plus des codages de caractères natifs , les personnages peuvent également être codées comme des références de caractères , qui peuvent être des références de caractères numériques ( décimal ou hexadécimal ) ou les références d'entité de caractère. Références d'entités de caractères sont parfois désignées comme des entités nommées, ou des entités HTML pour HTML. L' utilisation du HTML de références de caractères dérive de SGML.
Références de caractères HTML

Une référence de caractère numérique en HTML fait référence à un personnage de son Universal Character Set / point de code Unicode, et utilise le format

    & # nnnn ;

ou

    & # xhhhh ;

où nnnn est le point de code sous forme décimale , et hhhh est le point de code sous forme hexadécimale . Le X doit être en minuscules dans les documents XML . Le nnnn ou hhhh peut être n'importe quel nombre de chiffres et peuvent inclure des zéros . Le hhhh peut mélanger majuscules et minuscules , majuscules si c'est le style habituel .

Pas tous les navigateurs Web ou des clients de messagerie utilisés par les récepteurs de documents HTML ou des éditeurs de texte utilisés par les auteurs de documents HTML, seront en mesure de rendre tous les caractères HTML. La plupart des logiciels moderne est capable d'afficher la plupart ou tous les caractères de la langue de l' utilisateur , et en tirera une boîte ou un autre indicateur clair pour les personnages qu'ils ne peuvent pas rendre.

Pour les codes de 0 à 127 , le 7- bit ASCII standard d'origine , la plupart de ces caractères peuvent être utilisés sans une référence de caractère . Codes 160 à 255 peuvent tous être créés en utilisant des noms d'entités de caractères. Seuls quelques codes de numéro supérieur peuvent être créés en utilisant des noms d'entités , mais tous peuvent être créés en décimal référence de caractère numérique.

Les références d'entité de caractère peuvent aussi avoir le format suit: &name; où name est une chaîne alphanumérique sensible à la casse . Par exemple, « λ » peut également être codé comme λ dans un document HTML . Les références d'entités de caractères <,>, " et & sont prédéfinis en HTML et SGML, parce que <,>, " et et sont déjà utilisés pour délimiter balisage. C'est notamment n'inclut pas de XML (') entité. pour une liste de tous les fichiers HTML références d'entités caractères nommées (environ 250) , voir la liste des entités XML et HTML caractère références.

L'utilisation inutile des références de caractères HTML peut réduire considérablement la lisibilité HTML. Si l'encodage de caractères pour une page web est choisie de manière appropriée , puis références de caractères HTML ne sont habituellement requis pour le balisage des caractères de délimitation , comme mentionné ci-dessus, et pour quelques caractères spéciaux ( ou pas du tout si un codage Unicode comme UTF- 8 est utilisé ) . Entité HTML incorrecte des données peut également ouvrir des failles de sécurité pour les attaques par injection comme les cross-site scripting . Si les attributs HTML sont laissés non cotées, certains personnages , surtout espaces blancs , tels que l'espace et la tabulation , doivent être échappés en utilisant des entités . Autres langues liées à HTML ont leurs propres méthodes d'échapper caractères.
caractères illégaux

HTML interdit [ 8], l' utilisation des caractères avec Universal Character Set / points de code Unicode

    0 à 31 , à l'exception 9, 10, et 13 ( caractères de commande C0 )
    127 ( caractère DEL)
    128-159 ( x80 - x9F , les caractères de contrôle C1 )
    55296-57343 ( xD800 - xDFFF , les moitiés de substitution UTF-16 )

La norme Unicode interdit également :

    65534 et 65535 ( xFFFE - xFFFF ) , les non- personnages, liés à xFEFF , la marque d'ordre des octets .

Ces caractères sont même pas autorisés par référence. Autrement dit, vous ne devriez même pas écrire en tant que références de caractères numériques . Toutefois, les références à des personnages 128-159 sont généralement interprétés par les navigateurs Web clémentes comme s'ils étaient des références à des caractères attribués à 128-159 octets ( décimal) dans le codage windows-1252 caractères . Ceci est en violation de HTML et des normes SGML , et les personnages sont déjà attribués à des points de code le plus élevé , de sorte que les auteurs de documents HTML devraient toujours utiliser les points de code plus élevés. Par exemple, le signe de marque ( ™ ) , l'utilisation ™ , pas ™ .

Les caractères 9 ( onglet ) , 10 ( saut de ligne ) , et 13 (retour chariot ) sont autorisés dans les documents HTML , mais , avec 32 ( espace) sont tous considérés comme des " espaces " . [9] Le " saut de page " caractère de contrôle , qui serait à 12, n'est pas autorisé dans les documents HTML , mais est également mentionné comme étant l'un des "espace blanc" caractères - peut-être un oubli dans les spécifications . En HTML, les événements les plus consécutifs de caractères blancs , sauf dans un bloc de <pre> , sont interprétés comme constituant une seule « séparateur de mots " à des fins de rendu. Un séparateur de mots est généralement rendu un espace en largeur unique dans les langues européennes , mais pas dans tous les autres.
Références de caractères XML

Contrairement à HTML traditionnel avec sa large gamme de références d'entité de caractère, en XML , il ya seulement cinq prédéfinis références d'entité de caractère. Ils sont utilisés pour échapper les caractères qui sont balisage sensible dans certains contextes : [10]

    & → & ( esperluette , U 0026 )
    <→ <( signe moins que , U +003 C)
    > →> ( signe supérieur , U +003 E)
    "→" (guillemet , U +0022 )
    '→' ( apostrophe , U +0027 )

Toutes les autres références d'entités de caractères doivent être définis avant qu'ils ne puissent être utilisés. Par exemple, l'utilisation du courrier (ce qui donne é, latine minuscule e avec accent aigu , U +00 E9 en Unicode) dans un document XML génère une erreur à moins que l'entité a déjà été défini . XML nécessite aussi que le x dans les références numériques hexadécimaux être en minuscules : par exemple ਛ plutôt que ਛ . XHTML , qui est une application XML , prend en charge le jeu d'entités HTML , ainsi que des entités prédéfinies de XML .

Cependant, l'utilisation de « en XHTML doit généralement être évitée pour des raisons de compatibilité. »Ou« peut être utilisé à la place.

et a le problème particulier qu'il commence par le caractère d'être échappé . Une simple recherche sur Internet trouve millions de séquences &amp; amp; ... dans des pages HTML pour laquelle l'algorithme de remplacer une esperluette par la référence d'entité de caractères correspondant a probablement été appliquée à plusieurs reprises http://www.google.co.uk/search?q = % 22 % 26amp % 3Bamp % 3Bamp % 3Bamp % 3B % 22 manquant ou vide | title = (aide) .
Publié par Drupal Study