Quand faut-il utiliser des entités HTML?

115

Cela me déroute depuis un certain temps. Avec l'avènement de l'UTF-8 comme norme de facto dans le développement Web, je ne suis pas sûr dans quelles situations je suis censé utiliser les entités HTML et pour lesquelles devrais-je simplement utiliser le caractère UTF-8. Par exemple,

  • tiret em (-, &emdash;)
  • esperluette (&, &)
  • 3/4 fraction (¾, ¾)

Veuillez faire la lumière sur ce problème. Cela sera apprécié.

Allesklar
la source
Par ailleurs, que fera htmlentities () en PHP?
Joe Phillips
À la lecture des réponses et des commentaires, il me semble qu'il n'y a pas encore de règle universelle en faveur de l'un ou de l'autre, et la réponse est toujours que cela dépend .
Majid Fouladpour

Réponses:

76

Vous n'avez généralement pas besoin d'utiliser des entités de caractères HTML si votre éditeur prend en charge Unicode. Les entités peuvent être utiles lorsque:

  • Votre clavier ne prend pas en charge le caractère que vous devez saisir. Par exemple, de nombreux claviers n'ont pas d'em-dash ou de symbole de copyright.
  • Votre éditeur ne prend pas en charge Unicode (très courant il y a quelques années, mais probablement pas aujourd'hui).
  • Vous voulez rendre explicite dans la source ce qui se passe. Par exemple, le  code est plus clair que le caractère d'espace blanc correspondant.
  • Vous devez échapper les caractères HTML spéciaux comme <, &ou ".
JacquesB
la source
1
Très utile. Merci. J'utilise un programme utile pour obtenir des caractères inhabituels. Il s'appelle popchar et est fabriqué par Ergonis mais est uniquement pour OS X.
allesklar
3
Note latérale: Wikipédia impose toujours &nbsp;au lieu du caractère d'espacement réel, en partie parce que Firefox convertit U + 00A0 en U + 0020 dans les formulaires. Donc, utiliser l'entité dans ce cas est le seul moyen de s'assurer que la source ne soit pas perturbée chaque fois qu'un utilisateur de Firefox la modifie.
Joey
2
Un beau résumé, mais en ce qui concerne le dernier point, c'est <qu'il faut souvent s'échapper, jamais >(et ne "doit s'échapper que rarement à l'intérieur des valeurs d'attribut).
Jukka K. Korpela
Une autre raison de conserver & nbsp; est afin que vous puissiez afficher plusieurs espaces sur une page HTML.
zylstra
Donc &amp;devrait toujours être utilisé à la place de &? Y a-t-il une raison à cela?
Prometheus
116

Sur la base des commentaires que j'ai reçus, j'ai examiné cela un peu plus loin. Il semble qu'actuellement, la meilleure pratique consiste à renoncer à utiliser des entités HTML et à utiliser le caractère UTF-8 à la place . Les raisons énumérées sont les suivantes:

  1. Les encodages UTF-8 sont plus faciles à lire et à modifier pour ceux qui comprennent ce que signifie le caractère et savent comment le saisir.
  2. Les encodages UTF-8 sont tout aussi inintelligibles que les encodages d'entités HTML pour ceux qui ne les comprennent pas, mais ils ont l'avantage d'être rendus sous forme de caractères spéciaux plutôt que des encodages décimaux ou hexadécimaux difficiles à comprendre.

Tant que le codage de votre page est correctement défini sur UTF-8, vous devez utiliser le caractère réel au lieu d'une entité HTML. J'ai lu plusieurs documents sur ce sujet, mais les plus utiles étaient:

Extrait de l'article UTF-8: The Secret of Character Encoding :

Wikipedia est une excellente étude de cas pour une application qui utilisait à l'origine ISO-8859-1 mais qui est passée à UTF-8 lorsqu'elle est devenue beaucoup trop lourde pour prendre en charge les langues étrangères. Les robots vont désormais parcourir les articles et convertir les entités de caractères en leurs véritables caractères correspondants pour des raisons de convivialité et de recherche .

Cet article donne également un bel exemple impliquant l'encodage chinois. Voici l'exemple abrégé par paresse:

UTF-8:

這兩個字是甚麼意思

Entités HTML :

&#36889;&#20841;&#20491;&#23383;&#26159;&#29978;&#40636;&#24847;&#24605;

Les encodages d'entité UTF-8 et HTML n'ont aucun sens pour moi, mais au moins l'encodage UTF-8 est reconnaissable en tant que langue étrangère , et il sera rendu correctement dans une zone d'édition. L'article poursuit en disant ce qui suit à propos de la version codée par entité HTML:

Extrêmement gênant pour ceux d'entre nous qui savent réellement ce que sont les entités de caractère, totalement inintelligibles pour les utilisateurs pauvres qui ne le savent pas! Même les entités de caractères légèrement plus conviviales et "intelligibles" comme & theta; laissera les utilisateurs qui ne sont pas intéressés par l'apprentissage du HTML se gratter la tête. D'un autre côté, s'ils voient θ dans une zone d'édition, ils sauront qu'il s'agit d'un caractère spécial et le traiteront en conséquence, même s'ils ne savent pas comment écrire ce caractère eux-mêmes.

Comme d'autres l'ont noté, vous devez toujours utiliser des entités HTML pour les caractères XML réservés (esperluette, inférieur à, supérieur à).

William Brendel
la source
Cette réponse aide énormément. Mais pour clarifier, pour ma propre compréhension: il n'y a rien de risqué ou d'invalide à utiliser la &entity;syntaxe dans un document HTML avec un jeu de caractères UTF-8 déclaré, n'est-ce pas? Bien que les caractères UTF-8 simples soient meilleurs pour les raisons que vous avez énumérées, il n'y a pas de problème pour avoir des entités HTML à côté d'elles dans le même document?
Jacob Ford
@JacobFord Oui, mélanger des entités HTML avec des caractères UTF-8 n'est ni risqué ni invalide, mais peut être déroutant pour quelqu'un qui lit la source.
William Brendel
5

Je n'utiliserais pas UTF-8 pour les caractères qui sont facilement confondus visuellement. Par exemple, il est difficile de distinguer un emdash d'un moins, ou surtout un espace insécable d'un espace. Pour ces personnages, utilisez définitivement des entités.

Pour les caractères qui sont facilement compréhensibles visuellement (comme les exemples chinois ci-dessus), allez-y et utilisez UTF-8 si vous le souhaitez.

Ned Batchelder
la source
5

Personnellement, je fais tout en utf-8 depuis longtemps, cependant, dans une page html, vous devez toujours convertir les esperluettes (&), les caractères supérieurs à (>) et inférieurs à (<) en leurs entités équivalentes, & amp ;, & gt; et & lt;

De plus, si vous avez l'intention de faire de la programmation en utilisant le texte utf-8, il y a quelques points à surveiller.

  • XML a besoin de quelques lignes supplémentaires pour valider lors de l'utilisation d'entités.
  • Certaines bibliothèques ne fonctionnent pas bien avec utf-8. Par exemple, PHP dans certaines distributions Linux a abandonné la prise en charge complète de utf-8 dans leurs bibliothèques d'expressions régulières.
  • Il est plus difficile de limiter le nombre de caractères dans un texte qui utilise des entités html, car une seule entité utilise plusieurs caractères. Il y a aussi toujours le risque de couper l'entité en deux.
Marco Luglio
la source
C'est un point très mineur, mais il n'est pas nécessaire d'encoder plus de (>), seulement moins de (<).
Codemonkey
4

Les entités peuvent vous acheter une compatibilité avec des clients en état de mort cérébrale qui ne comprennent pas correctement les encodages. Je ne pense pas que cela inclue les navigateurs actuels, mais vous ne savez jamais quels autres types de programmes pourraient vous intéresser.

Plus utile, cependant, est que les entités HTML vous protègent de vos propres erreurs: si vous configurez mal quelque chose sur le serveur et que vous finissez par servir une page avec un en-tête HTTP qui dit que c'est ISO-8859-1et une METAbalise qui dit que c'est UTF-8, au moins votre & mdash; es fonctionnera toujours.

Jim Puls
la source
5
Vous pouvez cependant faire l'argument opposé - &mdashsi les en-têtes sont mal configurés, il est plus difficile de détecter un problème.
Pekka
4

Les entités HTML sont utiles lorsque vous souhaitez générer du contenu qui sera inclus (dynamiquement) dans des pages avec (plusieurs) encodages différents. Par exemple, nous avons du contenu en marque blanche qui est inclus à la fois dans les pages Web encodées ISO-8859-1 et UTF-8 ...

Si la conversion du jeu de caractères de / vers UTF-8 n'était pas un si gros désordre peu fiable (vous tombez toujours sur certains caractères et certains outils qui ne se convertissent pas correctement), la standardisation sur UTF-8 serait la voie à suivre.

mjy
la source
2

Si vos pages sont correctement encodées en utf-8, vous ne devriez pas avoir besoin d'entités html, utilisez simplement les caractères que vous voulez directement.

Otávio Décio
la source
3
Je pense que vous en aurez toujours besoin pour encoder les caractères réservés.
rmeador le
@rmeador - Je suis d'accord avec cela.
Otávio Décio
2

Toutes les réponses précédentes ont du sens pour moi.

De plus: cela dépend principalement de l'éditeur que vous souhaitez utiliser et de la langue du document. Au minimum, l'éditeur doit prendre en charge la langue du document. Cela signifie que si votre texte est en japonais, méfiez-vous de l'utilisation d'un éditeur qui ne les affiche pas (c'est-à-dire pas d'entités pour le document lui-même). Si c'est anglais, vous pouvez même utiliser un ancien éditeur de type vim et utiliser des entités uniquement pour le relatif rarement & copy; et amis. Bien sûr: & gt; for> et d'autres HTML-specials ont encore besoin d'échappements. Mais même avec les autres langues latines-1 (allemand, français, etc.), l'écriture ä est pénible de savoir où ...

De plus, j'écris personnellement des entités pour les caractères invisibles et ceux qui ressemblent à standard-ascii et sont donc facilement confondus. Par exemple, il y a u1173 (qui ressemble à un tiret dans certains jeux de caractères) ou u1175, qui ressemble à la barre verticale. J'utiliserais des entités pour ceux-là dans tous les cas.

blabla999
la source
& gt; n'est PAS nécessaire pour>, vous pouvez simplement utiliser>. & lt; EST nécessaire pour <, cependant.
Codemonkey