Outils / Texte et données / Entités HTML : encoder et décoder
Côté client

Entités HTML : encoder et décoder

Encodez les caractères spéciaux en entités HTML ou décodez des entités en texte brut pour produire un balisage sûr et éviter les failles XSS.

Ce que fait l'outil

  • Échappe & < > " ' / et l'accent grave
  • Encode tout caractère non ASCII en entité numérique
  • Décode les entités numériques (décimales et hexadécimales) et les entités nommées courantes
  • Traitement local, rien n'est envoyé à un serveur

Ne pas échapper < ou & dans un contenu injecté dans le DOM reste la première cause de failles XSS, et un simple chevron oublié suffit à casser un gabarit. Tapez ou collez du texte dans le champ du haut et cliquez sur Encoder ↓ pour obtenir une version sûre pour le HTML dans le champ du bas, ou collez un texte truffé d'entités en bas et cliquez sur Décoder ↑ pour retrouver un texte lisible. Les deux sens s'exécutent instantanément dans votre navigateur, dans un module Rust compilé en WebAssembly.

Qu'est-ce qu'une entité HTML ?

Une entité HTML remplace un caractère qui serait sinon interprété comme du balisage, ou qui ne peut pas être saisi ou transporté de façon fiable. Elle commence par une esperluette et se termine par un point-virgule. Les cinq qui comptent le plus pour la sécurité : &lt; pour <, &gt; pour >, &amp; pour &, &quot; pour le guillemet double et &#x27; pour l'apostrophe. Les encoder empêche le navigateur de prendre votre contenu pour des balises ou des limites d'attribut.

Entités nommées ou numériques

  • Entités nommées : abréviations lisibles comme &copy; (copyright), &nbsp; (espace insécable) ou &eacute; (é).
  • Entités numériques : le point de code Unicode du caractère, en décimal (&#233;) ou en hexadécimal (&#xE9;). Elles fonctionnent pour n'importe quel caractère, qu'il ait un nom ou non.

Ce que fait exactement l'encodeur

  • & < > deviennent &amp;, &lt; et &gt;.
  • Guillemets : " devient &quot; et ' devient &#x27;, ce qui rend la sortie sûre aussi dans une valeur d'attribut entre guillemets.
  • Barre oblique et accent grave : / devient &#x2F; et ` devient &#96;, un choix prudent hérité d'anciennes recommandations de l'OWASP pour les données non fiables.
  • Tout caractère non ASCII (accents, guillemets français, symbole euro, emoji) devient une entité numérique décimale : é donne &#233;, € donne &#8364;. Le résultat est en ASCII pur et résiste aux systèmes qui se trompent d'encodage.
  • Lettres non accentuées, chiffres, espaces et retours à la ligne restent intacts.

Pour un texte français, l'effet est visible : « Côte d'Ivoire » devient C&#244;te d&#x27;Ivoire. Un navigateur l'affiche exactement comme l'original.

Ce que fait exactement le décodeur

  • Toutes les entités numériques, décimales (&#233;) et hexadécimales (&#xE9;), sont décodées.
  • Un socle d'entités nommées est décodé : amp, lt, gt, quot, apos, nbsp, copy, reg, trade, mdash, ndash, laquo, raquo et hellip.
  • Les autres entités nommées, comme &eacute;, &agrave; ou &euro;, sont laissées telles quelles. HTML en définit plus de 2 000 ; si votre texte en contient, remplacez-les par des entités numériques ou décodez-les avec un vrai parseur HTML.
  • Le décodage s'applique une fois : &amp;lt; devient &lt;, pas <. Cliquez de nouveau pour descendre d'un niveau sur un texte échappé deux fois.
  • Une séquence qui ressemble à une entité mais sans point-virgule reste inchangée.

Cas d'usage courants

  • Éviter le balisage cassé et les XSS : échapper un texte saisi par un utilisateur avant de l'insérer dans une page.
  • Publier du code dans un CMS : encoder un extrait contenant < et > pour qu'il s'affiche au lieu d'être interprété.
  • Modèles d'e-mails : encoder les accents en entités numériques pour qu'ils s'affichent correctement même quand un client de messagerie se trompe de jeu de caractères.
  • Lire du HTML extrait ou exporté : décoder une chaîne pleine de &amp; et de références numériques.
  • Diagnostiquer un double échappement : quand une page affiche littéralement &amp;, décoder pas à pas pour voir combien de fois le texte a été échappé.

Par rapport au code

En production, utilisez l'échappement intégré à votre framework ou moteur de gabarits (React, Twig, Jinja et d'autres échappent par défaut) plutôt qu'un échappement manuel. PHP propose htmlspecialchars, Python html.escape et html.unescape. Cet outil sert aux cas manuels : préparer un extrait pour une documentation, vérifier ce qu'un gabarit devrait produire, lire une chaîne échappée dans un log.

Confidentialité : tout reste dans votre navigateur

Le texte collé est encodé ou décodé entièrement côté client par un module Rust compilé en WebAssembly. Rien n'est téléversé, journalisé ni stocké, ce qui compte quand le balisage contient des contenus internes, du code de gabarit ou des données d'utilisateurs. Vos données restent sur votre appareil, et l'outil fonctionne même hors ligne une fois la page chargée.

Foire aux questions

Mon texte est-il envoyé à un serveur ?
Non. L'encodage et le décodage s'exécutent localement dans votre navigateur. Rien ne quitte la page.
Pourquoi mes lettres accentuées deviennent-elles des nombres ?
L'encodeur transforme chaque caractère non ASCII en entité numérique pour produire de l'ASCII pur. Un navigateur affiche &#233; exactement comme é. Si votre page est bien servie en UTF-8, seuls &, <, > et les guillemets ont réellement besoin d'être échappés.
Pourquoi &eacute; n'est-il pas décodé ?
Le décodeur gère les entités numériques et un socle de 14 entités nommées. Les noms moins courants sont laissés intacts plutôt que devinés.
Le décodage supprime-t-il les balises HTML ?
Non. Il remplace seulement les entités par des caractères ; des balises comme <p> restent dans le texte. Pour obtenir un texte structuré lisible, convertissez plutôt le HTML en Markdown.
L'encodage suffit-il contre les XSS ?
Il protège un texte placé dans le contenu HTML ou dans un attribut entre guillemets. Il ne suffit pas dans un bloc <script>, dans une URL (liens javascript:) ni dans du CSS, qui demandent chacun leur propre échappement.
Quelle différence avec l'encodage d'URL ?
Les entités HTML protègent des caractères dans une page web. L'encodage d'URL (%20, %3C) protège des caractères dans un lien ou une chaîne de requête. Pour cela, utilisez l'encodeur et décodeur d'URL.

Outils connexes : pour passer d'un format de contenu à l'autre, le convertisseur HTML vers Markdown transforme le HTML en Markdown propre, et l'aperçu Markdown fait le chemin inverse.