web-dev-qa-db-fra.com

Quand faut-il utiliser des entités HTML?

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

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

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

110
allesklar

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 ni em-dash ni 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   le code est plus clair que le caractère d'espace blanc correspondant.
  • Vous devez échapper les caractères spéciaux HTML comme <, &, ou ".
75
JacquesB

Sur la base des commentaires que j'ai reçus, j'ai approfondi un peu la question. 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 taper.
  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 de s'afficher sous forme de caractères spéciaux plutôt que difficiles à comprendre les encodages décimaux ou hexadécimaux.

Tant que l'encodage 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: Le secret de l'encodage des caractères:

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 bots vont maintenant parcourir les articles et convertir les entités de caractères en leurs vrais personnages correspondants pour des raisons de convivialité et de recherche .

Cet article donne également un bel exemple de codage chinois. Voici l'exemple abrégé par souci de paresse:

UTF-8:

這兩個字是甚麼意思

Entités HTML :

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

Les encodages d'entités UTF-8 et HTML sont tous deux dénués de sens pour moi, mais au moins l'encodage UTF-8 est reconnaissable comme une langue étrangère , et il rendre correctement dans une zone d'édition. L'article poursuit en disant ce qui suit à propos de la version HTML codée par entité:

Extrêmement gênant pour ceux d'entre nous qui savent réellement ce que sont les entités de caractère, totalement inintelligible pour les utilisateurs pauvres qui ne le savent pas! Même les entités de caractère un peu plus conviviales et "intelligibles" comme thêta; laissera les utilisateurs qui ne sont pas intéressés à apprendre 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 à).

113
William Brendel

Je n'utiliserais pas UTF-8 pour les personnages qui se confondent visuellement facilement. 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 certainement des entités.

Pour les caractères faciles à comprendre visuellement (comme les exemples chinois ci-dessus), allez-y et utilisez UTF-8 si vous le souhaitez.

5
Ned Batchelder

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

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

  • XML a besoin de quelques lignes supplémentaires pour valider lors de l'utilisation d'entités.
  • Certaines bibliothèques ne jouent pas avec Nice avec utf-8. Par exemple, PHP dans certaines distributions Linux a abandonné la prise en charge complète d'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. De plus, il y a toujours le risque de réduire de moitié l'entité.
5
Marco Luglio

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 de jeux de caractères de/vers UTF-8 n'était pas un gros gâchis non fiable (vous tombez toujours sur certains personnages et certains outils qui ne se convertissent pas correctement), la normalisation sur UTF-8 serait la voie à suivre.

4
mjy

Les entités peuvent vous acheter une certaine compatibilité avec des clients dont le cerveau est mort et 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 frapper.

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-1 et une balise META qui indique que c'est UTF-8, au moins votre mdash; es fonctionnera toujours.

4
Jim Puls

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

De plus: cela dépend principalement de l'éditeur que vous avez l'intention d'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 son anglais, vous pouvez même utiliser un vieil éditeur de type vim et utiliser des entités uniquement pour la copie rarement relative; et amis. Bien sûr: gt; pour> et les autres spéciaux HTML ont encore besoin d'échappements. Mais même avec les autres langues latin-1 (allemand, français, etc.), l'écriture ä est pénible, vous savez 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 (ressemblant à un tiret dans certains jeux de caractères) ou u1175, qui ressemble à la barre verticale. J'utiliserais des entités pour ceux de toute façon.

2
blabla999

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.

2
Otávio Décio