Codeur d'Entités HTML
Convertir les caractères d'entités HTML en ligne, supporte l'encodage et le décodage pour prévenir les attaques XSS
Sélectionner la méthode de conversion
Qu'est-ce que l'encodage d'entités HTML ?
L'encodage d'entités HTML est un mécanisme qui convertit les caractères spéciaux en références d'entités HTML. En HTML, certains caractères ont des significations spéciales (comme <, >, &), et si vous devez afficher ces caractères eux-mêmes sur la page, vous devez utiliser l'encodage d'entités. L'encodage d'entités se présente sous deux formes : entités nommées (comme <) et entités numériques (comme <). Les entités nommées sont plus lisibles, tandis que les entités numériques peuvent représenter n'importe quel caractère Unicode. L’encodage HTML est important lorsqu’un texte doit être inséré dans du HTML sans être interprété comme balisage. Les caractères <, >, &, guillemets et apostrophes peuvent modifier tags, attributs ou entités. L’outil sert aux exemples, templates, contenus CMS et diagnostics liés au XSS. Le contexte reste essentiel: texte HTML, attributs, URLs, JavaScript et CSS exigent des règles d’échappement différentes, donc la sortie doit être utilisée au bon endroit.
Comment utiliser
Comment utiliser
- Saisissez ou collez le texte à convertir dans la zone de gauche
- Cliquez sur le bouton de conversion correspondant pour choisir la méthode d'encodage ou de décodage
- Le résultat s'affiche automatiquement à droite
- Cliquez sur le bouton 'Copier' pour copier le résultat dans le presse-papiers
Méthodes de conversion
Raccourcis clavier
- Ctrl + EEncodage d'entité HTML
- Ctrl + DDécodage d'entité HTML
Conseils d'encodage
- Encodez le texte destiné à l'utilisateur avant de l'insérer dans le code HTML, surtout s'il peut contenir des chevrons, des guillemets ou des esperluettes.
- L'encodage d'entité HTML empêche le balisage d'être interprété, mais il ne représente qu'une partie de la défense XSS et ne remplace pas l'échappement contextuel en sortie.
Cas d’utilisation
Principe technique
HTML utilise deux types de références de caractères définis par le WHATWG HTML Living Standard. Les références de caractères nommées commencent par & et se terminent par ;, tirées de la table entities.json maintenue par WHATWG (environ 2 231 noms dans la spécification actuelle, y compris les alias hérités sans point-virgule final comme & sans le ;). Les références de caractères numériques utilisent des points de code Unicode sous forme décimale (<) ou hexadécimale (<) et peuvent encoder n'importe quel caractère de U+0000 à U+10FFFF, à l'exception de la plage des suppléants U+D800-U+DFFF. Les cinq caractères qui DOIVENT être échappés pour préserver la sécurité syntaxique HTML sont & (&), < (<), > (>), " (") et ' (') ; notez que ' fait partie de XML et HTML5 mais n'est PAS valide en HTML 4.01, c'est pourquoi OWASP recommande la forme numérique ' pour les attributs délimités par des guillemets doubles devant traverser des parseurs hérités. L'encodage dans cet outil est un remplacement en une seule passe : l'ordre compte car & doit être échappé en premier, sinon les préfixes d'entités insérés pour < et > seraient eux-mêmes ré-échappés en &lt;. Le décodage exploite le parseur HTML du navigateur en assignant l'entrée au innerHTML d'un élément détaché et en lisant le textContent en retour ; cela fait appel à la machine à états Tokenizer officielle de la spécification HTML (sections 13.2.5.72 Character reference state à 13.2.5.80), qui résout correctement les formes nommées, décimales et hexadécimales, y compris les entrées malformées comme les points-virgules manquants. L'encodage numérique pour le mode encodage complet parcourt la chaîne point de code par point de code en utilisant String.prototype.codePointAt pour gérer les caractères astraux qui occupent une paire de suppléants UTF-16 (par ex. l'emoji U+1F600 devient 😀 et non le repli à deux suppléants). La prévention des XSS nécessite un échappement contextuel, et non un simple encodage d'entités HTML. L'OWASP Cross-Site Scripting Prevention Cheat Sheet définit cinq contextes distincts : corps HTML, attribut HTML (entre guillemets ou non), données JavaScript (dans <script>), CSS et URL. L'échappement par entités HTML ne couvre que les contextes 1 et 2. Les contextes JavaScript doivent utiliser les échappements \xHH ou \uHHHH via JSON.stringify, les contextes URL nécessitent encodeURIComponent (encodage pourcent RFC 3986), et les gestionnaires d'événements inline combinent les règles car leurs valeurs traversent à la fois les parseurs HTML et JavaScript. Un en-tête Content-Security-Policy avec script-src 'self' et suppression de 'unsafe-inline' est la couche de défense en profondeur moderne qui attrape les erreurs d'échappement, et les puits DOM tels que innerHTML, document.write et setAttribute('on*', ...) doivent être remplacés par textContent ou des liaisons gérées par le framework (JSX de React, moustache de Vue) qui échappent par défaut.
- Références nommées : environ 2 231 entrées dans entities.json de WHATWG ; les cinq noms devant être échappés sont & < > " ' (' est réservé à HTML5/XML, pas au HTML 4.01)
- Références numériques : décimales &#DDDDD; et hexadécimales &#xHHHH; couvrant U+0000 à U+10FFFF ; les suppléants U+D800-U+DFFF et U+0000 NULL sont invalides selon la spécification HTML
- Ordre d'échappement : & doit être remplacé en premier, sinon le préfixe & inséré des échappements suivants est doublement encodé ; l'encodage est en O(n) avec une table de recherche à 5 entrées
- Décodage via DOMParser : l'assignation au innerHTML d'un élément détaché invoque le tokenizer de la spécification HTML (Character reference state, sections 13.2.5.72-80) qui gère les entités héritées sans point-virgule final
- Gestion des caractères astraux : utilisation de String.prototype.codePointAt et d'une itération for...of pour que les emoji et les caractères CJK extension B (U+10000+) produisent un seul &#NNNNN; plutôt que deux références de suppléants
- Échappement contextuel (règle #0 de l'OWASP XSS Prevention Cheat Sheet) : corps HTML, attribut HTML, JavaScript, CSS et URL nécessitent chacun un échappement différent ; les entités HTML seules ne bloquent pas les XSS dans les puits JS ou URL
- Défense en profondeur : Content-Security-Policy script-src 'self' (style RFC), sanitisation par liste blanche DOMPurify pour les entrées de texte enrichi, et préférence pour textContent/innerText plutôt que innerHTML dans le code DOM vanilla
Exemples
Encodage d'élément basique
Entrée: <script>alert(1)</script>
Sortie: <script>alert(1)</script>
Utilisation: empêcher le navigateur d'interpréter le texte comme une vraie balise lors du rendu de contenu fourni par l'utilisateurEncodage de valeur d'attribut
Entrée: <div title="Hello & world">
Sortie: <div title="Hello & world">
Note: les guillemets et l'esperluette à l'intérieur de l'attribut sont encodés en entités afin que la valeur ne puisse pas s'échapper des guillemetsAffichage d'URL dans la page
Entrée: search?q=hello&lang=en
Sortie: search?q=hello&lang=en
Utilisation: la page doit encoder le & avant d'insérer l'URL dans le HTML, sinon l'analyseur peut traiter la suite comme une entité malforméeCaractères non-ASCII (encodage complet)
Entrée: caractères CJK comme 中文
Sortie: forme numérique UTF-8 complète 中文 (ou entités nommées si la page les prend en charge)
Utilisation: intégration sûre d'Unicode arbitraire dans du HTML hérité ; les pages modernes s'appuient généralement sur UTF-8 à la placeFAQ
Quels caractères l'encodage HTML convertit-il ?
Les cinq caractères réservés SGML : & → &, < → <, > → >, " → ", ' → ' (ou '). En option, les caractères non-ASCII peuvent être convertis en entités numériques (&#xNN;) pour les systèmes hérités qui ne gèrent pas l'UTF-8.
Quand ai-je besoin de l'encodage HTML ?
Chaque fois que du texte fourni par l'utilisateur est inséré dans le contenu HTML. Ne pas l'encoder est la cause première des vulnérabilités XSS. Encodez le contenu utilisateur pour le corps HTML, les valeurs d'attribut, le contexte JavaScript, le contexte CSS et le contexte URL — chaque contexte a des règles légèrement différentes.
Quelle est la différence entre ' et ' ?
Les deux produisent une apostrophe simple. ' a été ajouté à HTML5 mais n'est pas valide en HTML4 ni dans les anciens clients de messagerie — si votre sortie est lue par d'anciens systèmes, utilisez '. La page émet ' par défaut pour une compatibilité maximale.
Pourquoi ma sortie contient-elle encore & ?
Si l'entrée contient déjà une entité HTML comme &, l'encoder produit &amp; — ce qui est correct car l'esperluette en entrée était un caractère littéral, pas une entité. Décodez d'abord si votre source est déjà encodée en entités.
Les emojis sont-ils convertis ?
Les emojis sont du Unicode valide et le HTML moderne les gère comme des caractères ordinaires — aucun encodage nécessaire à moins que votre système cible n'insiste sur l'ASCII pur. Activez « entité numérique pour le non-ASCII » pour les convertir en forme &#xNNNN;.
L'encodage HTML est-il identique à l'encodage URL ?
Non. L'encodage URL (encodage pourcent) remplace les caractères non sûrs par des séquences %NN pour usage dans les URL. L'encodage HTML les remplace par des entités nommées ou numériques pour usage en HTML. Utilisez le bon outil dans le bon contexte — les mélanger crée des bugs de double encodage.
La conversion est-elle effectuée localement ?
Oui. L'encodage et le décodage se font dans votre navigateur. Le texte collé n'est pas téléversé.