Encodeur et Décodeur d'Entités HTML
Encodez du texte en entités HTML sûres ou décodez-les, instantanément — outil gratuit pour développeurs.
Votre texte reste sur votre appareil
Rien à supprimer ensuite
Sûr pour de vraies données utilisateur
Fonctionne dans tout navigateur moderne
Comment ça marche
- 1
Collez votre texte
Une chaîne avec des chevrons, une esperluette, des guillemets ou des lettres accentuées à placer dans du balisage.
- 2
Choisissez le contexte
Texte, valeur d’attribut ou encodage complet — chacun échappe un jeu de caractères différent.
- 3
Copiez le résultat
Collez-le dans un gabarit, un document XML, un flux ou le corps d’un e-mail.
Pourquoi cet outil
Le contexte est un choix, pas une supposition
Échapper pour du texte, pour une valeur d’attribut et pour une URL sont trois travaux distincts, et vous choisissez lequel.
Le double encodage est détecté
Une entrée contenant déjà des entités est signalée, pour ne pas transformer une esperluette deux fois de suite.
Sortie nommée ou numérique
Les références numériques fonctionnent en XML, dans les flux et en SVG, où la plupart des entités nommées n’existent pas.
Décodage sûr en aller-retour
Les formes nommée et numérique sont reconnues, y compris l’écriture hexadécimale et les entités sans point-virgule.
Honnête sur ce que fait l’échappement
Il rend un texte sûr à placer dans un contexte, ce qui est moins ambitieux que rendre sûr du balisage non fiable.
Rien ne quitte le navigateur
Le texte est converti sur cette page : les tickets et les noms de clients qui vous servent d’exemple restent chez vous.
Il n’existe pas un « échappement HTML » unique — c’est le contexte qui décide
C’est l’idée qui rend le reste du sujet compréhensible. Un navigateur analyse un document dans plusieurs états différents, et les caractères capables de terminer l’état courant diffèrent dans chacun. Dans du texte, seuls `<` et `&` peuvent commencer quelque chose de nouveau : ce sont donc les deux à échapper. Dans une valeur d’attribut entre guillemets doubles, `<` est inoffensif et `"` est fatal, car le guillemet termine l’attribut. Dans une valeur d’attribut sans guillemets, une espace y met fin, tout comme une tabulation, un saut de ligne, un accent grave, un signe égal et un chevron fermant. Dans un bloc `<script>`, l’échappement HTML ne sert strictement à rien et c’est l’échappement de chaîne JavaScript qu’il faut. Voilà pourquoi une unique fonction `escape()` appliquée partout produit à la fois des sorties cassées et de vraies vulnérabilités : elle en fait trop là où les caractères étaient sûrs, et pas assez là où ils ne l’étaient pas. Choisir un contexte avant d’encoder n’est pas un raffinement — c’est toute la décision.
Seule une poignée de caractères doit changer
Il vaut la peine de savoir à quel point la liste est courte, car l’essentiel du sur-échappement vient de l’ignorer. Les caractères à valeur syntaxique en HTML sont `<`, `>`, `&`, `"` et l’apostrophe. Parmi eux, `&` doit toujours être échappé parce qu’il commence une entité, et `<` toujours parce qu’il commence une balise. `>` relève de la politesse plutôt que de l’obligation dans du texte — un navigateur affiche très bien un `>` nu — même si l’échapper est une habitude dans la plupart des bases de code, parce que cela ne coûte rien et aide quand le balisage est ensuite traité par un outil plus strict. Les deux guillemets ne comptent que dans les valeurs d’attribut, et seulement celui qui sert de délimiteur. Tout le reste — chaque lettre accentuée, chaque caractère arabe ou chinois, chaque émoji — n’a besoin d’aucun échappement dans un document UTF-8 : l’encodage s’en charge déjà. Transformer `café` en `café` est légal et presque toujours inutile ; cela alourdit le fichier et rend la recherche plus difficile.
L’espace fine insécable, ou le caractère français qui n’a pas d’entité nommée
La typographie française impose une espace avant le point-virgule, les deux-points, le point d’interrogation et le point d’exclamation, et cette espace doit être insécable pour que le signe ne se retrouve pas seul en début de ligne. Le caractère correct est l’espace fine insécable, U+202F — et elle n’a pas d’entité nommée en HTML. On voit donc trois solutions de contournement dans la nature, toutes fautives à leur manière : une espace ordinaire, qui laisse le point d’interrogation passer à la ligne suivante ; ` `, qui est insécable mais trop large et donne une composition anglophone maladroite ; et ` `, qui a la bonne largeur mais reste sécable. La forme numérique ` ` est la seule à dire exactement ce qu’il faut, et elle a l’avantage de survivre aux formats qui ignorent les entités nommées. Le revers est qu’une chaîne pleine de U+202F casse silencieusement une recherche en base de données quand la saisie de l’utilisateur contient une espace normale — raison pour laquelle ce caractère appartient à la couche de présentation, jamais aux données stockées.
Le double encodage est le défaut que cet outil existe pour éviter
L’échappement n’est pas idempotent, et l’oublier produit l’un des défauts les plus reconnaissables du web. Encodez `&` une fois, vous obtenez `&`. Encodez le résultat à nouveau, vous obtenez `&amp;`, qui s’affiche sur la page comme le texte littéral `&`. Vous l’avez déjà vu : des titres de page affichant « Tom & Jerry », des objets d’e-mail avec `'` au milieu d’un mot, des noms de produits entourés de `"` dans les résultats de recherche. Cela arrive parce que l’échappement a été appliqué à deux couches qui s’ignoraient — un moteur de gabarits qui échappe automatiquement, plus un contrôleur qui a échappé par précaution avant de transmettre la chaîne. Le correctif est de ne jamais échapper deux fois, et la façon d’en être sûr est d’échapper exactement une fois, au dernier moment possible, à l’endroit où la chaîne entre dans le balisage. Tout ce qui est stocké déjà échappé dans une base finira par être échappé une seconde fois par ce qui l’affiche.
Les entités nommées sont une fonctionnalité de HTML, pas du texte
HTML5 définit plus de deux mille entités nommées, des familiers ` ` et `©` jusqu’à des choses comme `⨂`. XML en définit exactement cinq : `<`, `>`, `&`, `"` et `'`. Cet écart provoque une panne précise et fréquente. Mettez ` ` dans un flux RSS, un fichier SVG, un document XHTML, une mise en page Android ou une charge SOAP, et vous obtenez une erreur d’analyse : l’analyseur n’en a jamais entendu parler, et une entité non définie est fatale en XML au lieu d’être simplement ignorée. La forme numérique ` ` fonctionne partout, puisqu’elle n’a besoin d’aucune définition. Il existe un piège symétrique : `'` fait partie des cinq de XML mais n’existait pas en HTML4, si bien que d’anciens documents HTML et certains clients de messagerie l’affichent en toutes lettres. Si une chaîne peut voyager entre formats — et la plupart le font dans une pile moderne — les références numériques sont l’écriture sûre.
Échapper n’est pas assainir, et la différence compte
On confond constamment les deux, et c’est dans cette confusion que vivent les failles d’injection. Échapper prend du texte et le rend sûr à placer dans un contexte donné, pour qu’il soit affiché plutôt qu’interprété. Assainir prend du balisage destiné à rester du balisage et en retire les parties dangereuses. Échapper un commentaire avant de l’afficher est correct ; échapper un champ de texte enrichi que l’utilisateur a le droit de mettre en forme détruit la mise en forme, et la réponse habituelle — laisser passer le HTML sans échappement — est ce qui ouvre réellement la brèche. L’exemple le plus tranchant de la différence est une URL : encodez un lien en entités et `javascript:alert(1)` survit parfaitement intact, car le décodage des entités a lieu avant la vérification du schéma, si bien que `javascript:` redevient `javascript:` et s’exécute. Aucune dose d’échappement HTML ne protège un `href` ; seule la validation du schéma le fait. L’échappement résout exactement un problème, et savoir lequel est tout l’enjeu.
Erreurs courantes à éviter
- Utiliser une seule fonction d’échappement partout. Texte, valeurs d’attribut et blocs de script se terminent sur des caractères différents : un unique utilitaire en fait trop ici et pas assez là.
- Échapper deux fois la même chaîne. L’échappement n’est pas idempotent — `&` devient `&` puis `&amp;`, d’où les titres de page qui affichent « Tom & Jerry ».
- Employer ` ` avant un point d’interrogation ou un point-virgule. L’espace correcte en français est l’espace fine insécable ; ` ` est insécable mais trop large et donne une composition anglophone.
- Mettre des entités nommées dans du XML. Seules cinq y sont définies : ` ` est une erreur d’analyse fatale dans un flux, un SVG ou un XHTML, alors que ` ` fonctionne partout.
- Compter sur l’encodage en entités pour rendre une URL sûre. Les entités sont décodées avant la vérification du schéma : `javascript:` redevient `javascript:` et s’exécute.
Comparaison
| Critère | Cet outil | Encodeurs en ligne | Une bibliothèque de langage |
|---|---|---|---|
| Texte envoyé à un serveur | Jamais | Le plus souvent | Non |
| Permet de choisir le contexte | Oui | Rarement | Le plus souvent |
| Alerte sur le double encodage | Oui | Non | Non |
| Sortie numérique pour XML | Oui | Parfois | Configurable |
| Décode tout le jeu nommé HTML5 | Oui | Partiellement | Le plus souvent |
| Prix | Gratuit | Gratuit / offres payantes | Gratuit |
Fonctionnalités
Encodage et décodage
Les deux sens, pour vérifier ce qu’un système a produit aussi facilement que préparer ce que vous envoyez.
Encodage minimal ou complet
N’échappez que les caractères exigés par le contexte, ou tout caractère non-ASCII, selon la destination.
Prise en charge des entités nommées
Tout le jeu nommé de HTML5 est reconnu au décodage, y compris la longue traîne que personne ne tape à la main.
Hexadécimal et décimal
Les références numériques sont lues et écrites dans les deux écritures, car les vrais documents contiennent les deux.
Détection du double encodage
Les entités déjà présentes dans l’entrée sont mises en évidence avant que vous ne les encodiez une seconde fois.
Grandes entrées prises en charge
Un gabarit entier ou un long export se convertit sans envoi ni plafond de taille.
Rien à installer
Pas d’outil de build, pas d’environnement d’exécution, pas de dépendances : tout se passe sur la page web.
Compatible arabe et RTL
Interface complète en huit langues, dont l’arabe de droite à gauche.
Sécurisé par défaut
Servi en HTTPS, sans suivi du contenu ni envoi à un tiers.
Qui l’utilise
Développeurs web
Vérifier le comportement d’une chaîne une fois placée dans une valeur d’attribut.
Développeurs e-mail
Préparer objets et corps de message pour des clients qui analysent strictement.
Rédacteurs techniques
Montrer des exemples de code dans une page sans que le navigateur tente de les exécuter.
Qui débogue du texte abîmé
Décoder une chaîne arrivée avec `&amp;` en plein milieu.
Questions Fréquentes
Non. Tout s’exécute localement dans votre navigateur — votre texte n’est jamais envoyé, stocké ni partagé.
Oui — entièrement gratuit, sans compte et sans limite.