Ce que fait cet outil
Il décode les cinq entités prédéfinies par XML — &, <, >, " et ' — ainsi que les références de caractères numériques dans les deux formes : décimale A et hexadécimale A, y compris au-delà de U+FFFF, si bien que 😀 redonne son emoji.
Les noms d’entités sont sensibles à la casse, comme l’exige XML : & est décodé, & ne l’est pas. Une référence a aussi besoin de son point-virgule — & sans lui est du texte ordinaire et reste tel quel.
Une seule passe, délibérément
Le décodage s’effectue exactement une fois. &lt; donne < et non <, parce que &lt; est la forme échappée du texte littéral < et que ce texte est la bonne réponse.
Décoder une seconde fois, c’est retransformer du balisage échappé en balisage actif — l’étape à l’origine de toute une classe de failles d’injection. Si votre valeur est réellement encodée deux fois, recollez le résultat et décodez à nouveau : une décision que vous prenez, plutôt qu’une que l’outil prend à votre place.
Ce qu’il ne fait pas
Les entités nommées de HTML sont hors périmètre. , © et les quelques milliers d’autres appartiennent à HTML, pas à XML, et ressortent intactes.
Les références numériques invalides sont préservées verbatim plutôt que remplacées. Un point de code de substitution (�) ou une valeur au-delà de U+10FFFF (�) ne peut correspondre à aucun caractère, et rendre la référence inchangée garde l’entrée récupérable au lieu de la perdre silencieusement. Il en va de même pour tout caractère que XML 1.0 ne peut absolument pas représenter — NUL, la plupart des caractères de contrôle, les non-caractères U+FFFE et U+FFFF : � et  ressortent tels qu’écrits. Les décoder vous rendrait un document qu’aucun analyseur XML n’accepte.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.