web-dev-qa-db-fra.com

<meta charset = "utf-8"> vs <meta http-equiv = "Content-Type">

Afin de définir le jeu de caractères pour HTML5 Doctype, quelle notation dois-je utiliser?

  1. Court:

    <meta charset="utf-8" /> 
    
  2. Longue:

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

En HTML5, ils sont équivalents. Utilisez le plus court, il est plus facile de se rappeler et de taper. Le support du navigateur est correct car il a été conçu pour une compatibilité ascendante.

1046
Quentin

Les deux formes de la déclaration meta charset sont équivalentes et devraient fonctionner de la même manière sur tous les navigateurs. Cependant, vous devez vous rappeler quelques points lorsque vous déclarez le jeu de caractères de vos fichiers Web au format UTF-8:

  1. Enregistrez vos fichiers au format UTF-8 sans le marque d'ordre des octets (BOM).
  2. Déclarez l'encodage dans vos fichiers HTML en utilisant meta charset (comme ci-dessus).
  3. Votre serveur Web doit servir vos fichiers, en déclarant le codage UTF-8 dans l'en-tête HTTP Content-Type.

Les serveurs Apache sont configurés pour servir les fichiers ISO-8859-1 par défaut. Vous devez donc ajouter la ligne suivante à votre fichier .htaccess:

AddDefaultCharset UTF-8

Ceci configurera Apache pour servir vos fichiers déclarant le codage UTF-8 dans l'en-tête de réponse Content-Type, mais vos fichiers doivent être enregistrés dans UTF-8 ( sans nomenclature) pour commencer.

Le Bloc-notes ne peut pas enregistrer vos fichiers au format UTF-8 sans la nomenclature. Un éditeur gratuit qui peut être Notepad ++ . Dans la barre de menus du programme, sélectionnez "Encodage> Encoder en UTF-8 sans BOM". Vous pouvez également ouvrir des fichiers et les enregistrer à nouveau dans UTF-8 en utilisant "Encodage> Convertir en UTF-8 sans nomenclature".

Plus sur le Byte Order Mark (BOM) sur Wikipedia .

246
CodeBoy

Une autre raison d’accepter le court terme est qu’elle correspond à d’autres instances dans lesquelles vous pouvez spécifier un jeu de caractères dans le balisage. Par exemple:

<script type="javascript" charset="UTF-8" src="/script.js"></script>

<p><a charset="UTF-8" href="http://example.com/">Example Site</a></p>

La cohérence permet de réduire les erreurs et de rendre le code plus lisible.

Notez que l'attribut charset respecte la casse. Vous pouvez utiliser UTF-8 ou UTF-8, mais UTF-8 est plus clair, plus lisible et plus précis.

En outre, il n'y a absolument aucune raison d'utiliser une valeur autre que UTF-8 dans l'attribut de méta-jeu de caractères ou l'en-tête de page. UTF-8 est le codage par défaut pour les documents Web depuis HTML4 en 1999 et le seul moyen pratique de créer des pages Web modernes.

De plus, vous ne devez pas utiliser d'entités HTML dans UTF-8. Les caractères tels que le symbole de copyright doivent être saisis directement. Les seules entités que vous devez utiliser concernent les 5 caractères de marquage réservés: inférieur à, supérieur à, esperluette, premier, double premier. Les entités ont besoin d'un analyseur HTML (que vous ne voudrez peut-être pas toujours utiliser à l'avenir), elles introduiront des erreurs, rendront votre code moins lisible, augmenteront la taille de vos fichiers et, parfois, décoderont de manière incorrecte dans divers navigateurs, en fonction des entités que vous avez utilisées. Apprenez à saisir/insérer le droit d'auteur, la marque déposée, les guillemets, les guillemets, les apostrophes, les tirets, les tirets, les balles, les euros et tous les autres caractères rencontrés dans votre contenu, et à les utiliser dans votre code. Le Mac dispose d'un visualiseur de caractères que vous pouvez activer dans les préférences système du clavier. Vous pouvez ensuite rechercher et faire glisser les caractères dont vous avez besoin, ou utiliser le visualiseur de clavier correspondant pour déterminer les touches à saisir. Par exemple, la marque est Option + 2. UTF-8 contient tous les caractères et symboles de chaque langage humain écrit. Donc, il n'y a aucune excuse pour utiliser - au lieu d'un dash em. Ce n’est pas une mauvaise idée d’apprendre les règles de ponctuation et de typographie également ... par exemple, sachant qu’une période va dans une citation proche, pas à l’extérieur.

Utiliser une balise pour quelque chose comme le type de contenu et l'encodage est très ironique, car sans connaître ces choses, vous ne pouvez pas analyser le fichier pour obtenir la valeur de la balise méta.

Non, ce n'est pas vrai. Le navigateur commence par analyser le fichier en tant que codage par défaut du navigateur, soit UTF-8 ou ISO-8859-1. Étant donné que US-ASCII est un sous-ensemble des deux normes ISO-8859-1 et UTF-8, le navigateur peut lire parfaitement de toute façon ... c'est la même chose. Lorsque le navigateur rencontre la balise meta charset, si l'encodage est différent de ce qu'il utilise déjà, le navigateur recharge la page dans l'encodage spécifié. C'est pourquoi nous plaçons la balise meta charset en haut, juste après la balise head, avant toute chose, même le titre. De cette façon, vous pouvez utiliser des caractères UTF-8 dans votre titre.

Vous devez enregistrer vos fichiers au format UTF-8 sans nomenclature

Ce n'est pas strictement vrai. Si votre document ne contient que des caractères US-ASCII, vous pouvez l'enregistrer sous US-ASCII et le servir comme UTF-8, car il s'agit d'un sous-ensemble. Mais s'il y a des caractères Unicode, vous avez raison, vous devez enregistrer sous UTF-8 sans nomenclature.

Si vous voulez un bon éditeur de texte qui enregistrera vos fichiers au format UTF-8, je vous recommande le Bloc-notes ++.

Sur le Mac, utilisez Bare Bones TextWrangler (gratuit) sur le Mac App Store ou Bare Bones BBEdit qui est au Mac App Store pour 39,99 $ ... très bon marché pour un outil aussi formidable. Dans les deux applications, un menu au bas de la fenêtre du document vous permet de spécifier le codage du document et vous pouvez facilement choisir "UTF-8 no BOM". Et bien sûr, vous pouvez définir cela comme valeur par défaut pour les nouveaux documents dans Préférences.

Mais si votre serveur Web sert le codage dans l'en-tête HTTP, ce qui est recommandé, les deux [balises méta] sont inutiles.

C'est faux. Vous devez bien sûr définir le codage dans l'en-tête HTTP, mais également dans l'attribut meta charset afin que la page puisse être enregistrée par l'utilisateur hors du navigateur sur le stockage local, puis ouverte à nouveau ultérieurement, auquel cas la seule indication du codage qui sera présente est l'attribut meta charset. Vous devez également définir une balise de base pour la même raison ... sur le serveur, la balise de base n’est pas nécessaire, mais lorsqu’elle est ouverte à partir d’un stockage local, la balise de base permet à la page de fonctionner comme si elle se trouvait sur le serveur. actifs en place et ainsi de suite, pas de liens brisés.

AddDefaultCharset UTF-8

Ou vous pouvez simplement changer l'encodage de types de fichiers particuliers comme ceci:

AddType text/html;charset=utf-8 html

Une astuce pour servir à la fois les fichiers UTF-8 et Latin-1 (ISO-8859-1) consiste à attribuer aux fichiers UTF-8 une extension "texte" et les fichiers Latin-1 "txt".

AddType text/plain;charset=iso-8859-1 txt
AddType text/plain;charset=utf-8 text

Enfin, envisagez d’enregistrer vos documents avec des fins de ligne Unix, et non avec des fins de ligne héritées DOS ou Mac (classiques), ce qui n’aidera pas et pourrait faire mal, en particulier à mesure que nous nous éloignons de ces systèmes hérités. Un document HTML avec un code HTML5 valide, un codage UTF-8 et des fins de ligne Unix est un travail bien fait. Vous pouvez partager, éditer, stocker, lire, récupérer et compter sur ce document dans de nombreux contextes. C'est la lingua franca. C'est du papier numérique.

81
Simon White

<meta charset="utf-8"> a été introduit avec/pour HTML5.

Comme mentionné dans la documentation, les deux sont valables. Cependant, <meta charset="utf-8"> est uniquement pour HTML5 (et plus facile à saisir/à mémoriser).

En temps voulu, l'ancien style deviendra obsolète dans un avenir proche. Je m'en tiendrai au nouveau <meta charset="utf-8">.

Il n'y a qu'un seul moyen, mais en haut. Dans le cas de la technologie, il s’agit de supprimer l’ancien (vraiment, vraiment vite)

Documentation: Attribut de méta-caractères HTML - W3Schools

30
Omar

Sans contester les autres réponses, je pense que ce qui suit mérite d'être mentionné.

  1. La notation "long" (http-equiv) et la notation "courte" sont égales, selon la première éventualité gagnante;
  2. Les en-têtes de serveur Web remplaceront toutes les balises <meta>;
  3. BOM (Byte Order Mark) remplacera tout, et dans de nombreux cas, cela affectera le langage HTML 4 (et probablement d’autres choses aussi);
  4. Si vous ne déclarez aucun encodage, vous obtiendrez probablement votre texte dans "l'encodage de remplacement" défini par votre navigateur. Ni dans Firefox ni dans Chrome c'est utf-8;
  5. En l'absence d'autres indices, le navigateur essaiera de lire votre document comme s'il se trouvait dans ASCII pour obtenir le codage. Vous ne pouvez donc utiliser aucun codage étrange (utf-16 avec BOM devrait suffire). ;
  6. Bien que les spécifications spécifient que la déclaration de codage doit être comprise dans les 512 premiers octets du document, la plupart des navigateurs essaieront de lire plus que cela.

Vous pouvez tester en exécutant echo 'HTTP/1.1 200 OK\r\nContent-type: text/html; charset=windows-1251\r\n\r\n\xef\xbb\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500 et en pointant votre navigateur sur localhost:4500. (Bien entendu, vous souhaiterez modifier ou supprimer des pièces. La pièce de la nomenclature est \xef\xbb\xbf. Méfiez-vous du codage de votre Shell.)

Veuillez noter qu'il est très important de déclarer explicitement le codage. Laisser les navigateurs deviner peut conduire à des problèmes de sécurité.

17
squirrel

Utilisez <meta charset="utf-8" /> pour les navigateurs Web lorsque vous utilisez HTML5.

Utilisez <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> lorsque vous utilisez HTML4 ou XHTML, ou pour les analyseurs dom obsolètes, tels que DOMDocument dans php 5.3

11
Timo Huovinen

Il y a des nouvelles basées sur Mozilla Foundation , et sitepoint

N'utilisez pas cette valeur (http-equiv=content-type) car elle est obsolète. Préférez l'attribut charset sur l'élément <meta>. enter image description here

2
user10089632

Pour intégrer une signature à un email, j'utiliserais la version longue:

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

La raison en est que peu de lecteurs de courrier électronique utilisent HTML5, il est donc toujours préférable d’utiliser de vieux styles HTML. En fait, il vaut mieux utiliser des tables que divs + css.

0
chelder