Comment échapper ou déséchapper du HTML
- Choisissez Échapper ou Déséchapper.
- Pour échapper, choisissez ce qu’il faut échapper sous Échapper :
- Seulement & < > " ‘ pour du HTML que vous collerez dans une page ou un template.
- Plus tout le non-ASCII pour les pages, e-mails ou systèmes qui ne gèrent pas bien l’UTF-8.
- Tous les caractères pour encoder tout le texte, afin de tester des analyseurs.
- Choisissez le Format : Nommées (é), Décimales (é) ou Hexa (é). Le format nommé se rabat sur le décimal pour les caractères sans nom courant. Décochez Échapper les guillemets si le texte ne va que dans le contenu d’éléments.
- Copier la sortie. Inverser fait passer le résultat de l’autre côté pour vérifier l’aller-retour.
Le déséchappement utilise l’analyseur HTML du navigateur : chacune des plus de 2 000 références nommées de HTML5 est donc prise en charge, ainsi que les références décimales et hexadécimales. L’entrée n’est jamais rendue en HTML.
Entités courantes
| Caractère | Nommée | Décimale | Hexa |
|---|---|---|---|
& | & | & | & |
< | < | < | < |
> | > | > | > |
" | " | " | " |
' | ' (HTML5) | ' | ' |
| espace insécable | |   |   |
é | é | é | é |
— | — | — | — |
€ | € | € | € |
© | © | © | © |
😀 | aucune | 😀 | 😀 |
Les références numériques utilisent le point de code Unicode. L’emoji occupe quatre octets en UTF-8, mais une seule référence.
Pièges à l’échappement et au décodage
- Échappez
&en premier. Remplacer<par<puis&par&produit&lt;. Tout outil d’échappement écrit à la main doit traiter&avant les autres. - Un
&non encodé dans le texte peut devenir un symbole. HTML reconnaît encore certaines anciennes entités sans point-virgule : le texte?id=1©=2¶=3s’affiche donc?id=1©=2¶=3. Écrivez&pour chaque esperluette, y compris dans les URL. - Le double échappement apparaît sous la forme
&lt;b&gt;sur la page. Déséchappez une fois, puis trouvez la couche qui échappe deux fois. n’est pas une espace. Il se décode en U+00A0, qui ressemble à une espace mais fait échouer les comparaisons de chaînes ettrim()dans certains langages.- Les entités ne sont pas de l’encodage d’URL. Dans un lien,
&sépare les paramètres de requête dans la source HTML, alors que%26est une esperluette littérale à l’intérieur d’une valeur. L’encodeur d’URL gère le second cas.
Échapper et déséchapper dans le code
import html
html.escape('5 > 3 & "quotes"') # '5 > 3 & "quotes"'
html.unescape("Café — ©") # 'Café — ©'
const escapeHtml = s => s.replace(/&/g, "&").replace(/</g, "<")
.replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
const unescapeHtml = s =>
new DOMParser().parseFromString(s, "text/html").documentElement.textContent;
html.escape en Python échappe les guillemets par défaut et écrit ' sous la forme '. En PHP, htmlspecialchars() est le choix habituel ; depuis PHP 8.1, il échappe par défaut les deux types de guillemets. DOMParser n’exécute pas les scripts du document analysé, ce qui en fait un moyen sûr de décoder dans le navigateur. Pour d’autres manipulations de chaînes en JavaScript, voir la page JavaScript.
Entités, Base64 et data URI
Les entités HTML et Base64 répondent à des problèmes différents. Les entités rendent des caractères sûrs dans une source HTML ; Base64 transforme des octets en texte pour qu’un fichier entier tienne dans un attribut. Pour intégrer un document HTML complet dans une URI data: ou un champ JSON, encodez-le avec HTML en Base64 plutôt que d’échapper chaque caractère.
FAQ
Quels caractères faut-il échapper en HTML ?
Dans le contenu texte, & et <, et > par convention. Dans les valeurs d’attributs, aussi le guillemet qui délimite la valeur, " ou '. Tout le reste, y compris les lettres accentuées et les emoji, peut rester tel quel dans une page UTF-8.
Quelle est la différence entre ' et ' ?
Les deux désignent l’apostrophe. ' est défini en HTML5 et en XML mais manquait en HTML 4 : ' est donc la forme qui fonctionne dans tous les analyseurs et clients e-mail. L’outil d’échappement utilise '.
Pourquoi vois-je &amp; sur ma page ?
Le texte a été échappé deux fois : & est devenu &, puis un second passage l’a transformé en &amp;. Déséchappez une fois ici pour retrouver le texte voulu, et supprimez l’étape d’échappement en trop, généralement un moteur de templates qui échappe une valeur déjà échappée.
Échapper les entités HTML empêche-t-il les XSS ?
Cela empêche l’injection dans le texte HTML et dans les valeurs d’attributs entre guillemets. Cela ne rend pas les données sûres dans des blocs <script>, des URL javascript:, du CSS ou des attributs sans guillemets ; ces contextes ont besoin de leur propre encodage. Préférez l’échappement automatique de votre moteur de templates.