Skip to content

Encodeur d'entités HTML gratuit — Échapper le HTML

Encodez les entités HTML et échappez les caractères spéciaux (< > & " ') en ligne — gratuit, sans inscription, 100 % dans votre navigateur. Sortie nommée, décimale ou hexadécimale ; jamais envoyée.

Sans pistage Fonctionne dans le navigateur Gratuit

Votre texte est encodé localement dans votre navigateur et n'est jamais envoyé, journalisé ni stocké. Il reste sur cet appareil.

Options · Options de format et d'encodage
Format d'entité
0 caractères
HTML encodé
0 caractères
Vérifié pour la conformité de l'encodage d'entités (nommé / décimal / hex), l'échappement sûr contre le XSS des cinq caractères spéciaux dans les contextes HTML et attribut, la convention d'apostrophe ' compatible, la confidentialité sans réseau ni stockage de l'entrée, et l'accessibilité (contrôles libellés, annonces en région active à l'encodage et à la copie). — Équipe Encodage de Go Tools · 17 juin 2026

Qu'est-ce que l'encodage d'entités HTML ?

L'encodage d'entités HTML — aussi appelé échappement HTML — est le processus consistant à remplacer les caractères ayant une signification spéciale en HTML par une représentation textuelle sûre appelée entité, afin que le navigateur les affiche comme du texte littéral au lieu de les interpréter comme du balisage. Les cinq caractères les plus importants sont ceux que le HTML utilise pour structurer un document : les chevrons < et > qui ouvrent et ferment les balises, l'esperluette & qui commence une entité, et les guillemets " et ' qui délimitent les valeurs d'attribut. Quand l'un d'eux apparaît dans un contenu qui doit être affiché plutôt qu'exécuté, il doit être échappé, sinon le navigateur lira mal la page — au mieux votre texte s'affiche de travers, au pire un attaquant glisse une balise <script>.

Il est utile d'être précis sur ce que fait cet outil. Il encode du texte en entités ; il n'assemble ni ne met en forme un document. Si vous voulez lire une chaîne de code dans une page comme du texte brut, ou que vous insérez une entrée fournie par un utilisateur dans votre HTML et devez la neutraliser, c'est le bon outil. Si au contraire vous voulez indenter et nettoyer du balisage existant, c'est le travail du formateur HTML ; et pour retransformer les entités en caractères, utilisez le décodeur d'entités HTML.

Il y a trois façons d'écrire une entité, et elles sont interchangeables. Une référence nommée utilise un libellé lisible (< pour <, © pour ©) ; une référence numérique décimale écrit le point de code Unicode du caractère en base 10 (< pour <) ; et une référence hexadécimale écrit le même point de code en base 16 (< pour <), correspondant à la notation U+XXXX du standard Unicode. Les entités nommées se lisent le mieux mais n'existent que pour les caractères ayant un nom défini ; les entités numériques peuvent représenter n'importe quel point de code, ce qui en fait le repli sûr. Le tableau ci-dessous liste les entités que vous utiliserez le plus souvent :

| Character | Named | Decimal | Hex | |-----------|-------|---------|-----| | < | &lt; | &#60; | &#x3C; | | > | &gt; | &#62; | &#x3E; | | & | &amp; | &#38; | &#x26; | | " | &quot; | &#34; | &#x22; | | ' | &#x27; | &#39; | &#x27; | | (space) | &nbsp; | &#160; | &#xA0; | | © | &copy; | &#169; | &#xA9; | | ® | &reg; | &#174; | &#xAE; | | ™ | &trade; | &#8482; | &#x2122; | | € | &euro; | &#8364; | &#x20AC; | | £ | &pound; | &#163; | &#xA3; | | — | &mdash; | &#8212; | &#x2014; | | – | &ndash; | &#8211; | &#x2013; | | … | &hellip; | &#8230; | &#x2026; | | é | &eacute; | &#233; | &#xE9; |

Notez que l'apostrophe s'écrit ' (ou ') plutôt que ' : la nommée ' n'a été normalisée qu'en HTML5 et XML et n'est pas sûre dans les anciens analyseurs HTML4, la forme numérique — comprise partout — est donc le choix compatible. Cet outil suit la même convention que la bibliothèque he largement utilisée, raison pour laquelle la sortie par défaut pour ' est '.

La distinction entre un jeu de caractères et une entité mérite d'être retenue, car elle explique l'option « Encoder tout le non-ASCII ». Un jeu de caractères (comme UTF-8) détermine comment les caractères sont stockés en octets ; une entité est une façon d'écrire un caractère en n'utilisant que les caractères ASCII simples & # ; ainsi que des lettres ou des chiffres. Sur une page UTF-8 moderne, é, — et 😀 sont des caractères bruts valides et n'ont besoin d'aucune entité — c'est pourquoi le mode par défaut les laisse tranquilles. Vous ne les forcez en entités que lorsque le texte doit passer par un système incapable de gérer l'UTF-8 brut, auquel cas chaque point de code non ASCII est réécrit en référence numérique ou nommée ASCII. Et comme tout cela s'exécute dans votre navigateur, le balisage que vous échappez — même un modèle privé ou un brouillon non publié — ne traverse jamais le réseau. Pour des conversions connexes, les outils d'échappement JSON et d'encodage / décodage Base64 gèrent respectivement l'échappement des chaînes JavaScript et le transport binaire sûr.

// Server-side templates auto-escape, but when you build HTML by hand you must escape yourself.
// The five reserved characters and their safe entities:
//   <  →  &lt;     >  →  &gt;     &  →  &amp;     "  →  &quot;     '  →  &#x27;

// Node.js — escape untrusted input before inserting it into HTML element content.
function escapeHtml(str) {
  return str
    .replace(/&/g, '&amp;')   // & first, so later entities are not double-escaped
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#x27;'); // numeric form — safe in HTML4, HTML5 and XML
}

const userInput = `<a href="x">Tom & Jerry's</a>`;
const safe = escapeHtml(userInput);
// → &lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;
document.getElementById('out').innerHTML = `<p>${safe}</p>`; // renders as literal text

// ---------------------------------------------------------------
// In practice, prefer the platform's built-in escaping where it exists:
//   - React / Vue / Angular escape interpolated text by default
//   - Use textContent instead of innerHTML when you only need text:
//       el.textContent = userInput;  // the browser escapes for you
//   - Server frameworks (Jinja, ERB, Blade) auto-escape unless you opt out

Fonctionnalités clés

Échappe correctement les cinq caractères réservés

< > & " ' sont convertis en leurs entités sûres exactement comme le ferait une bibliothèque de prévention XSS éprouvée — y compris le ' compatible pour l'apostrophe plutôt que ' non sûr en HTML4. C'est l'ensemble précis qui neutralise une entrée non fiable dans les contextes d'élément et d'attribut HTML.

Sortie nommée, décimale et hexadécimale

Obtenez les mêmes caractères sous forme d'entités nommées lisibles (<, ©), de références numériques décimales (<) ou de références hexadécimales (<). Choisissez la forme attendue par votre système destinataire ; les trois donnent des caractères identiques à l'analyse.

Mode optionnel « encoder tout le non-ASCII »

Par défaut, seuls les caractères réservés sont échappés, gardant les accents et les émojis en UTF-8 brut lisible. Cochez une case pour convertir chaque point de code au-dessus de 0x7F en entité ASCII pour les jeux de caractères hérités ou les systèmes qui altèrent l'UTF-8.

Encodage instantané en direct

La sortie se met à jour au fur et à mesure de la frappe — pas de bouton d'envoi, pas de latence d'aller-retour. Collez un grand bloc de balisage et le résultat échappé apparaît immédiatement, prêt à copier.

Référence rapide d'entités intégrée

Un tableau de référence des entités les plus courantes — les cinq réservées plus ©, ®, ™, €, —,   et d'autres — figure directement sur la page sous forme nommée, décimale et hexadécimale, vous n'avez donc jamais à chercher une entité ailleurs.

Bascule en un clic vers le décodeur

Inverser le sens passe directement au décodeur d'entités HTML pour inverser l'opération. Encoder et décoder sont des inverses exacts, vous pouvez donc faire un aller-retour du texte sans perte.

100 % privé, dans le navigateur uniquement

Tout l'encodage se fait sur votre appareil en JavaScript — aucune requête réseau, aucune journalisation, aucun stockage, vérifiable dans les DevTools → Réseau. Le balisage privé, les modèles d'e-mail et les brouillons non publiés ne quittent jamais l'onglet.

Disponible en 15 langues

L'interface complète — libellés, instructions et conseils — est localisée en 15 langues, de sorte que l'outil et ses conseils d'échappement sont clairs où que travaille votre équipe.

Exemples détaillés

Échapper un extrait HTML (le mode « caractères spéciaux » par défaut)

<a href="x">Tom & Jerry's</a>
&lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;

Dans le mode « caractères spéciaux » par défaut, l'encodeur ne réécrit que les cinq caractères porteurs de sens dans le balisage HTML : < devient <, > devient >, & devient &, " devient ", et ' devient '. L'apostrophe est émise sous la forme numérique ' plutôt que sous l'entité nommée ', car ' n'est pas définie en HTML4 et certains anciens analyseurs peuvent buter dessus, tandis que la forme hexadécimale est comprise partout. Après l'encodage, le navigateur affiche la chaîne comme du texte littéral — la balise <a> est affichée, pas cliquée — c'est exactement ainsi que l'on montre du balisage en toute sécurité dans une page.

Les caractères non ASCII sont préservés dans le mode par défaut

Visit our café — it's 😀
Visit our café — it&#x27;s 😀

Le mode « caractères spéciaux » ne touche qu'aux cinq caractères HTML réservés, si bien que les lettres accentuées (café), le tiret cadratin (—) et les émojis (😀) passent inchangés. Cela garde la sortie lisible et légère, ce qui convient aux pages UTF-8 qui déclarent déjà <meta charset="utf-8">. Seule l'apostrophe de « it's » est échappée, en '. Si vous devez convertir chaque caractère non ASCII en entité pour un jeu de caractères hérité, cochez « Encoder tout le non-ASCII » — voir l'exemple ci-dessous.

Entités numériques décimales

<>&"'
&#60;&#62;&#38;&#34;&#39;

Passez le format en Décimal et chaque caractère spécial est écrit comme une référence numérique décimale : < donne <, > donne >, & donne &, " donne ", et ' donne '. Les entités décimales sont la forme numérique la plus largement compatible — tout analyseur HTML ou XML conforme les comprend — ce qui en fait un choix sûr quand vous ne pouvez pas garantir que des entités nommées comme © sont prises en charge par le système destinataire.

Entités numériques hexadécimales

<>&"'
&#x3C;&#x3E;&#x26;&#x22;&#x27;

Le format Hex écrit chaque caractère comme une référence numérique hexadécimale : < donne <, > donne >, & donne &, " donne ", et ' donne '. Hex et décimal sont interchangeables — les deux référencent le même point de code Unicode — mais l'hexadécimal correspond directement à la notation U+XXXX du standard Unicode, c'est donc la forme que beaucoup de développeurs préfèrent pour documenter ou raisonner sur des points de code précis.

Encoder tous les caractères non ASCII

café
caf&eacute;  (named)  ·  caf&#233;  (decimal)  ·  caf&#xE9;  (hex)

Cochez « Encoder tous les caractères non ASCII » et chaque point de code au-dessus de 0x7F est converti en entité, pas seulement les cinq réservés. Le é de café devient l'entité nommée é, la décimale é ou l'hexadécimale é selon le format choisi — les trois référencent le même caractère, U+00E9. Ce mode sert aux pages servies dans un jeu de caractères non Unicode, ou aux systèmes qui altèrent l'UTF-8 brut, où forcer tout en entités ASCII sur 7 bits garantit que le texte traverse le transport intact.

Comment utiliser l'encodeur d'entités HTML

  1. 1

    Collez votre HTML ou votre texte

    Déposez le balisage ou le texte brut que vous voulez échapper dans la zone de saisie. La sortie encodée se met à jour en direct au fur et à mesure de la frappe — il n'y a pas de bouton d'envoi et rien n'est transmis nulle part.

  2. 2

    Choisissez le format d'entité

    Nommé est le format lisible par défaut (<, &, ©). Passez à Décimal (<) ou Hex (<) quand un système destinataire préfère les références numériques ou que vous ne pouvez pas garantir la prise en charge des entités nommées.

  3. 3

    Encodez éventuellement tout le non-ASCII

    Laissez cette option désactivée pour les pages UTF-8 modernes afin que les accents et les émojis restent des caractères bruts lisibles. Cochez-la uniquement quand le texte doit survivre à un jeu de caractères hérité à un octet, ce qui convertit chaque caractère au-dessus de 0x7F en entité ASCII.

  4. 4

    Copiez le résultat encodé

    Cliquez sur Copier pour placer la chaîne échappée dans votre presse-papiers, prête à être collée dans un modèle, une page de documentation ou un champ de base de données. Effacer réinitialise les deux volets pour l'extrait suivant.

  5. 5

    Besoin de l'inverse ? Inversez le sens

    Utilisez Inverser le sens pour basculer vers le décodeur d'entités HTML lorsque vous voulez retransformer les entités en caractères qu'elles représentent.

Erreurs courantes d'encodage HTML

A échappé l'esperluette en dernier, causant un double échappement

Si vous remplacez < et > avant &, les entités que vous venez de créer voient leur & ré-échappé, donc < devient &lt; et s'affiche comme du texte littéral. Échappez toujours & en premier.

✗ Incorrect
replace < and > first, then &  →  &lt;  becomes  &amp;lt;
✓ Correct
escape & first, then the rest  →  &lt;  stays  &lt;

A utilisé ' pour l'apostrophe dans des contextes hérités

' n'est pas définie en HTML4 et certains clients de messagerie l'affichent littéralement. Utilisez la forme numérique ' ou ', comprise par tout analyseur, quand vous ciblez des environnements anciens ou mixtes.

✗ Incorrect
It&apos;s here  →  may render as  It&apos;s here
✓ Correct
It&#x27;s here  →  renders as  It's here

A encodé la donnée deux fois

Passer un texte déjà échappé une nouvelle fois dans l'encodeur le double-encode : & devient &amp; et l'utilisateur voit & au lieu de &. Échappez exactement une fois, à la sortie.

✗ Incorrect
&amp;  encoded again  →  &amp;amp;  shows as  &amp;
✓ Correct
&amp;  left as-is  →  renders as  &

A utilisé l'échappement HTML pour un contexte URL ou JavaScript

Les entités HTML ne rendent pas une valeur sûre dans une URL ou un script en ligne. Un espace dans une URL a besoin de %20, et une chaîne en JavaScript a besoin d'un échappement JS/JSON. Adaptez l'encodage à l'endroit où la valeur atterrit.

✗ Incorrect
href="/search?q=a&amp;b c"  →  the space still breaks the URL
✓ Correct
href="/search?q=a%26b%20c"  →  URL-encoded, valid

A encodé du non-ASCII inutilement sur une page UTF-8

Forcer café en café sur une page UTF-8 moderne alourdit la source et nuit à la lisibilité sans bénéfice. Laissez le non-ASCII brut sauf si un jeu de caractères hérité exige réellement des entités.

✗ Incorrect
caf&eacute; on a UTF-8 page  →  needless, harder to read
✓ Correct
café on a UTF-8 page  →  valid and clean

A oublié d'échapper les guillemets dans une valeur d'attribut

Insérer un " non échappé dans un attribut laisse la valeur en sortir et injecter de nouveaux attributs — un vecteur XSS. Échappez toujours " (et idéalement ') en contexte d'attribut, ce que cet outil fait par défaut.

✗ Incorrect
title="He said "hi""  →  attribute breaks out
✓ Correct
title="He said &quot;hi&quot;"  →  contained

Qui utilise cet outil

Afficher des échantillons de code dans une page web
Vous rédigez un tutoriel ou une documentation qui doit montrer du HTML littéral ? Échappez l'extrait pour que <strong>bold</strong> apparaisse comme du texte plutôt que d'être rendu. Collez le balisage, copiez la sortie échappée et déposez-la dans un bloc <pre> ou <code>.
Assainir l'entrée utilisateur contre le XSS
Avant d'insérer une chaîne fournie par un utilisateur dans votre HTML, échappez les cinq caractères réservés pour qu'une charge comme <script>…</script> devienne du texte inerte. C'est la défense fondamentale contre l'injection de script quand vous construisez le balisage à la main.
Stocker du balisage dans un champ de base de données ou du JSON
Besoin de sauvegarder un fragment HTML comme une chaîne brute sans qu'il soit interprété en aval ? Encodez-le d'abord pour que les chevrons et les esperluettes survivent au stockage et au réaffichage intacts, puis décodez au retour.
Rédiger des modèles d'e-mail et du contenu CMS
Les clients de messagerie et les systèmes de gestion de contenu sont intolérants aux caractères spéciaux bruts. Échappez l'ensemble réservé — et éventuellement tout le non-ASCII — pour que votre modèle s'affiche de manière cohérente entre les clients qui peuvent ne pas partager votre jeu de caractères.
Convertir du texte pour un jeu de caractères hérité
Vous ciblez un système incapable de gérer l'UTF-8 brut ? Activez « Encoder tout le non-ASCII » pour réécrire chaque lettre accentuée, symbole et émoji en entité ASCII, garantissant que le texte survit au transport à travers des pipelines propres sur 7 bits.
Échapper des valeurs d'attribut XML et SVG
Le XML et le SVG en ligne partagent les caractères réservés du HTML. Encodez les guillemets et les chevrons pour qu'une chaîne contenant du balisage s'insère sans risque dans une valeur d'attribut sans casser la structure du document.
Rechercher une entité rapidement
Vous avez oublié si le signe de marque déposée est ™ ou ™ ? Saisissez le caractère, lisez son entité nommée, décimale et hexadécimale dans la sortie, ou consultez le tableau de référence rapide intégré sans quitter la page.

Comment fonctionne l'encodeur

Mode caractères spéciaux (par défaut)
Par défaut, seuls les cinq caractères réservés du HTML sont échappés — & < > " ' — en suivant les règles de sérialisation HTML du WHATWG pour une sortie sûre. & est remplacé en premier pour que les entités produites pour les autres caractères ne soient pas doublement échappées. Tous les autres caractères, y compris non ASCII, passent inchangés.
L'apostrophe utilise '
Plutôt que la nommée ' — non définie en HTML4 et risquée dans certains analyseurs hérités — le guillemet simple est émis sous la forme numérique ' (décimal '), référençant U+0027. Cela correspond à la convention de bibliothèques éprouvées comme he et garantit que la sortie est sûre en HTML4, HTML5 et XML.
Encodage nommé, décimal et hexadécimal
Le sélecteur de format contrôle l'écriture de chaque caractère échappé : Nommé utilise les libellés définis là où ils existent (<, ©), Décimal écrit le point de code Unicode en base 10 (<), et Hex l'écrit en base 16 (<). Les formes numériques référencent les mêmes points de code que les formes nommées et sont interchangeables à l'analyse.
Option « encoder tout le non-ASCII »
Quand elle est activée, chaque caractère dont le point de code dépasse 0x7F est converti en entité dans le format choisi — café devient café (nommé), café (décimal) ou café (hex). Les caractères astraux comme les émojis sont encodés avec leur point de code complet (😀 → 😀). Cela produit une sortie ASCII propre sur 7 bits pour le transport hérité.
Jeu de caractères contre entités
Un jeu de caractères définit comment le texte est stocké en octets ; une entité est une façon d'écrire un caractère en n'utilisant que de l'ASCII. Sur une page UTF-8, les caractères non ASCII n'ont besoin d'aucune entité, c'est pourquoi le mode par défaut les laisse bruts. Tout encoder n'est nécessaire que lorsque la sortie doit traverser un jeu de caractères non Unicode ou un système hostile à l'UTF-8.
Local au navigateur, réseau nul
L'encodage s'exécute de manière synchrone en JavaScript sur le thread principal ; il n'y a aucun appel d'API, aucun aller-retour de worker vers un serveur, et aucune persistance. L'entrée ne quitte jamais la page, ce que vous pouvez confirmer en observant un panneau Réseau vide pendant la frappe.

Bonnes pratiques d'échappement HTML

Échapper à la sortie, dans le bon contexte
Encodez la donnée au moment où vous l'insérez dans le HTML, pas à sa réception, et adaptez l'encodage au contexte. L'encodage d'entités HTML est pour le contenu d'élément et d'attribut HTML ; utilisez l'encodage URL dans les URL et l'échappement JavaScript/JSON dans les blocs de script. Échapper dans le mauvais contexte laisse une faille.
Toujours échapper l'entrée non fiable
Toute chaîne provenant d'un utilisateur, d'un téléversement ou d'une API externe doit être échappée avant d'atterrir dans votre balisage. C'est la défense XSS centrale : une charge comme <script>alert(1)</script> devient du texte inerte une fois les chevrons transformés en entités.
Préférer l'échappement intégré là où il existe
React, Vue et la plupart des moteurs de templates côté serveur échappent automatiquement le texte interpolé ; définir element.textContent échappe aussi pour vous. Utilisez cet outil pour des conversions ponctuelles et pour comprendre la sortie — mais dans le code applicatif, appuyez-vous sur l'auto-échappement du framework plutôt que de le coder à la main.
Laisser le non-ASCII brut sur les pages UTF-8
Si votre page déclare <meta charset="utf-8">, n'encodez pas les accents et les émojis en entités — l'UTF-8 brut est plus court, plus lisible et tout aussi correct. Réservez « Encoder tout le non-ASCII » aux véritables cas de jeux de caractères hérités qui l'exigent réellement.
Utiliser l'apostrophe numérique dans les contextes mixtes
Quand la sortie peut être consommée par d'anciens analyseurs, des processeurs XML ou des clients de messagerie, préférez la forme numérique ' à la nommée ' pour le guillemet simple. La forme numérique est comprise partout ; la forme nommée non, et un « ' » littéral perdu dans le texte rendu est un bogue courant et évitable.

Questions fréquentes

Mon texte est-il envoyé à votre serveur lorsque je l'encode ?
Non. Chaque caractère est encodé entièrement dans votre navigateur en JavaScript — ouvrez les DevTools → Réseau et vous verrez zéro requête se déclencher quand vous saisissez ou collez du texte. Rien n'est envoyé, rien n'est journalisé, rien n'est écrit sur le disque. Cette confidentialité compte parce que le balisage que l'on échappe est souvent sensible : un extrait issu d'un CMS privé, un modèle d'e-mail interne, une réponse au support client, ou un brouillon d'article non publié. Sur un encodeur côté serveur, chacun de ces éléments traverserait le réseau vers une machine que vous ne contrôlez pas ; ici, le texte ne quitte jamais l'onglet. C'est toute la raison d'échapper le HTML côté client plutôt que de le coller sur un site qui pourrait, en principe, garder une copie de tout ce qu'il traite.
Que signifie échapper le HTML, et pourquoi le ferais-je ?
Échapper le HTML consiste à remplacer les caractères que le navigateur interpréterait autrement comme du balisage par leurs entités équivalentes, afin qu'ils soient affichés comme du texte littéral. Le cas classique est l'affichage de code dans une page : si vous voulez qu'un visiteur lise la chaîne <strong>bold</strong> plutôt que de voir le mot « bold » rendu en gras, vous échappez les chevrons en <strong>bold</strong>. L'autre cas, plus important, est la sécurité : quand vous insérez une entrée utilisateur non fiable dans une page, échapper les cinq caractères réservés (< > & " ') empêche cette entrée de sortir de son contexte et d'injecter une balise <script> — la défense centrale contre les attaques par injection de script (XSS). Tout texte provenant d'un utilisateur et arrivant dans votre HTML doit d'abord être échappé.
Quelle est la différence entre entités nommées, décimales et hexadécimales ?
Les trois produisent le même caractère ; elles ne diffèrent que par la façon dont la référence est écrite. Une entité nommée utilise un libellé lisible — < pour <, & pour &, © pour © — facile à lire mais qui ne fonctionne que pour les caractères ayant un nom défini. Une entité numérique décimale écrit le point de code Unicode en base 10, comme < pour < ou é pour é. Une entité hexadécimale écrit le même point de code en base 16, comme < pour < ou é pour é, reflétant la notation U+XXXX du standard Unicode. Les entités nommées sont les plus lisibles et constituent le bon choix par défaut pour les caractères réservés courants ; les entités numériques (décimales ou hex) peuvent encoder n'importe quel point de code, y compris ceux sans nom, ce qui en fait le choix sûr quand vous ne pouvez pas garantir que le destinataire prend en charge une entité nommée donnée.
Pourquoi l'apostrophe est-elle encodée en ' et non en ' ?
Parce que ' n'est pas sûre partout. L'entité nommée ' n'a été introduite qu'en HTML5 et XML — elle n'est pas définie en HTML4, si bien que quelques anciens analyseurs et clients de messagerie l'affichent comme le texte littéral « ' » au lieu d'une apostrophe. La référence numérique ' (ou sa jumelle décimale ') correspond au même caractère exact, U+0027, et est comprise par tout analyseur conforme jamais écrit. En suivant le comportement de bibliothèques éprouvées comme he, cet outil émet le ' universellement compatible pour l'apostrophe, de sorte que la sortie peut être insérée dans n'importe quel contexte HTML, XML ou attribut sans surprise.
Dois-je encoder les caractères non ASCII comme é, — ou 😀 ?
En général, non. Si votre page déclare <meta charset="utf-8"> — ce que fait essentiellement toute page moderne — alors les lettres accentuées, les tirets cadratins et les émojis sont parfaitement valides en UTF-8 brut et n'ont besoin d'aucun encodage. C'est pourquoi le mode par défaut « caractères spéciaux » les laisse intacts, gardant votre sortie courte et lisible. Vous n'avez besoin d'encoder les caractères non ASCII que lorsque le texte sera servi ou stocké dans un jeu de caractères hérité à un octet, ou passera par un système qui corrompt l'UTF-8 brut. Pour ces cas, cochez « Encoder tous les caractères non ASCII » et chaque point de code au-dessus de 0x7F est converti en entité ASCII. En cas de doute, gardez le mode par défaut et assurez-vous que votre déclaration de jeu de caractères est correcte.
Échapper le HTML me protège-t-il des attaques XSS ?
L'échappement est le fondement de la défense XSS, mais il dépend du contexte, donc la réponse honnête est « oui, lorsqu'il est appliqué correctement ». Encoder les cinq caractères réservés avant de placer une entrée non fiable dans le contenu d'un élément HTML empêche de manière fiable un attaquant d'injecter des balises ou des scripts — une charge comme <script>alert(1)</script> devient du texte inerte. La nuance est que le HTML comporte plusieurs contextes, chacun avec ses propres règles d'échappement : dans une valeur d'attribut vous devez échapper les guillemets (ce que fait cet outil), à l'intérieur d'un bloc <script> ou d'un gestionnaire d'événement en ligne vous avez besoin d'un échappement JavaScript, et dans une URL vous avez besoin d'un encodage URL. Utilisez l'encodage d'entités HTML pour les contextes HTML et attribut ; pour les URL, tournez-vous vers l'encodeur / décodeur d'URL, et pour intégrer une chaîne dans du JavaScript ou du JSON, voyez l'outil d'échappement JSON. Encodez au moment de la sortie, dans le contexte où la donnée atterrit.
Comment inverser l'opération — retransformer les entités en caractères ?
Utilisez le décodeur d'entités HTML compagnon. Il prend une chaîne pleine d'entités comme <div> & © et la reconvertit en caractères réels <div> & ©, en gérant les entités nommées, les références décimales, les références hexadécimales, et même les entités héritées sans point-virgule final comme &copy. L'encodage et le décodage sont des inverses exacts pour les caractères réservés, vous pouvez donc faire un aller-retour du texte entre les deux outils sans perte. Si vous cherchez pourquoi une page affiche &lt; littéral au lieu de <, le décodeur est le moyen le plus rapide de voir ce à quoi les entités se résolvent réellement.
L'encodage va-t-il changer le texte visible ou casser ma mise en page ?
Non — c'est tout l'intérêt. Une entité n'est qu'une orthographe alternative d'un caractère : quand un navigateur analyse <, il affiche un seul glyphe <, identique au caractère brut. Une page correctement échappée a donc exactement la même apparence pour un visiteur qu'avec des caractères bruts ; la seule différence est que le navigateur traite la version échappée comme du texte plutôt que comme du balisage. La seule chose que l'échappement modifie, c'est la longueur et l'apparence de la chaîne source, raison pour laquelle on n'échappe que ce qui doit l'être. Si votre objectif est de nettoyer et d'indenter du balisage en désordre plutôt que de l'échapper, c'est un autre travail — utilisez le formateur HTML.