ToolActToolAct

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

Texte en entrée
Caractères: 0
Octets: 0
Résultat
Caractères: 0
Octets: 0

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 &lt;) et entités numériques (comme &#60;). 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

  1. Saisissez ou collez le texte à convertir dans la zone de gauche
  2. Cliquez sur le bouton de conversion correspondant pour choisir la méthode d'encodage ou de décodage
  3. Le résultat s'affiche automatiquement à droite
  4. Cliquez sur le bouton 'Copier' pour copier le résultat dans le presse-papiers

Méthodes de conversion

Encodage d'entité HTMLConvertit les caractères < > & " ' en entités nommées, utile pour la prévention XSS
Décodage d'entité HTMLRestaure les entités nommées en caractères d'origine
Encodage d'entité numériqueConvertit les caractères spéciaux en entités numériques (par ex. &#60;)
Encodage completEncode tous les caractères non-ASCII, utile pour l'internationalisation
Décodage completRestaure toutes les formes d'entités HTML

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

Échapper les caractères dangereux avant d’insérer du texte dans du HTMLEncodez les esperluettes, chevrons, guillemets et apostrophes en entités nommées afin que du texte copié s’affiche correctement dans des exemples de balisage sans être interprété comme des balises ou des attributs. La chaîne source d’origine n’est jamais transmise — chaque substitution s’applique uniquement à la valeur saisie, ce qui permet de nettoyer de la documentation interne, des textes non publiés ou des extraits privés sans envoyer le contenu vers un service distant.
Décoder les entités présentes dans une source copiéeBasculez en mode décodage entité, numérique ou complet pour retransformer &amp;lt;, &#60; et autres séquences encodées en texte lisible lors du débogage ou du nettoyage de contenu. Le décodage utilise le parseur DOM de la page sur un nœud détaché, ce qui signifie que l’entrée n’entre jamais dans une requête réseau et que la chaîne reconstruite reste dans le même onglet navigateur.
Choisir entre encodage minimal et encodage completUtilisez les modes entité ou numérique pour les seuls caractères HTML critiques, ou l’encodage complet lorsque les caractères non-ASCII nécessitent également des références numériques pour un système ancien. Choisissez le mode adapté au jeu d’entités attendu par la destination — par exemple, entités nommées pour un HTML lisible, entités numériques pour des templates CMS anciens, encodage complet pour des canaux de transport ASCII uniquement.
Encoder les esperluettes et chevrons pour un collage sûr dans un CMSPassez un extrait de code ou un template en mode encodage pour que &, <, > et les guillemets deviennent des entités &amp; &lt; &gt; avant de coller dans un éditeur de texte enrichi, un modèle d’e-mail ou un champ de site statique qui ré-interprète l’entrée comme du HTML. L’encodage s’effectuant localement par regex, l’extrait original reste sur la page jusqu’à la copie explicite du résultat, ce qui est utile lorsque la source contient des exemples confidentiels.
Décoder du JSON dans des attributs HTML lors d’une inspectionBasculez en décodage numérique ou complet pour retransformer &#123; &#x7B; &quot; et séquences similaires en caractères littéraux lors de la lecture de JSON encodé, de payloads webhook ou de chaînes d’attributs extraites d’une source de page sauvegardée. Le JSON décodé reste dans la zone de sortie de droite ; rien n’est envoyé à un point de terminaison de parseur, ce qui permet d’inspecter des fragments de payloads de logs de production sans quitter le navigateur.

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 &amp sans le ;). Les références de caractères numériques utilisent des points de code Unicode sous forme décimale (&#60;) ou hexadécimale (&#x3C;) 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 & (&amp;), < (&lt;), > (&gt;), " (&quot;) et ' (&#39;) ; notez que &apos; fait partie de XML et HTML5 mais n'est PAS valide en HTML 4.01, c'est pourquoi OWASP recommande la forme numérique &#39; 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 &amp;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 &#128512; 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 &amp; &lt; &gt; &quot; &apos; (&apos; 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 &amp; 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:      &lt;script&gt;alert(1)&lt;/script&gt;
Utilisation: empêcher le navigateur d'interpréter le texte comme une vraie balise lors du rendu de contenu fourni par l'utilisateur

Encodage de valeur d'attribut

Entrée: <div title="Hello & world">
Sortie: &lt;div title=&quot;Hello &amp; world&quot;&gt;
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 guillemets

Affichage d'URL dans la page

Entrée:      search?q=hello&lang=en
Sortie:      search?q=hello&amp;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ée

Caractères non-ASCII (encodage complet)

Entrée:      caractères CJK comme 中文
Sortie:      forme numérique UTF-8 complète &#20013;&#25991; (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 place

FAQ

Quels caractères l'encodage HTML convertit-il ?

Les cinq caractères réservés SGML : & → &amp;, < → &lt;, > → &gt;, " → &quot;, ' → &#39; (ou &apos;). 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 &#39; et &apos; ?

Les deux produisent une apostrophe simple. &apos; 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 &#39;. La page émet &#39; par défaut pour une compatibilité maximale.

Pourquoi ma sortie contient-elle encore &amp; ?

Si l'entrée contient déjà une entité HTML comme &amp;, l'encoder produit &amp;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é.