Convertissez les caractères spéciaux en entités HTML et inversement.
Les résultats sont fournis à titre informatif. Vérifiez-les auprès d'autres sources.
Échappez l'esperluette en dernier et vous corrompez toutes les entités que vous venez d'écrire
L'échappement HTML compte cinq caractères et une règle d'ordre. L'esperluette doit passer en premier, car chaque remplacement suivant introduit de nouvelles esperluettes. Échappez-la en dernier et < devient &lt; : la page affiche le texte de l'entité au lieu du caractère, et le bug ressemble à un gabarit abîmé plutôt qu'à une erreur d'ordre.
Comment ça marche
- Convertit les caractères porteurs de sens en HTML vers leurs formes d'entité, et inversement.
- Applique les remplacements dans l'ordre qui évite le double échappement.
- Couvre les cinq entités prédéfinies plus les références numériques pour tout le reste.
& → & DOIT être remplacé en premier < → < > → > " → " ' → ' tout le reste : &#DÉCIMAL; ou &#xHEX;
Exemple chiffré
La chaîne <b>a & b</b> échappée correctement, puis avec l'esperluette traitée en dernier.
- ordre correct → <b>a & b</b>
- esperluette en dernier → &lt;b&gt;a & b&lt;/b&gt;
- chaque entité des étapes précédentes a été échappée à nouveau
- le navigateur affiche ensuite le texte littéral <b> sur la page
Une seule ligne déplacée transforme une sortie fonctionnelle en codes d'entité visibles. Les cinq remplacements sont triviaux pris séparément ; la seule chose qui puisse échouer est leur enchaînement.
Lire le résultat
- L'échappement dépend du contexte et ceci n'en couvre qu'un. Une valeur sûre dans le texte d'un élément ne l'est pas automatiquement dans un attribut, une URL, un bloc de script ou du CSS : chacun exige son propre échappement, appliqué à l'endroit d'usage.
- ' est défini en XML mais ne l'était pas en HTML 4, d'où ' comme forme numérique plus sûre pour l'apostrophe dans une sortie HTML susceptible d'être lue par d'anciens analyseurs.
- Les valeurs d'attribut réclament spécifiquement l'échappement des guillemets. Un guillemet non échappé à l'intérieur d'un attribut entre guillemets referme l'attribut trop tôt : c'est le mécanisme derrière une bonne part des injections via gabarits.
- Échapper n'est pas assainir. Cela rend le balisage inerte en l'affichant comme du texte ; cela ne décide pas si le contenu était acceptable au départ, et un système devant autoriser un peu de HTML a besoin d'un analyseur et d'une liste d'autorisations, pas d'un échappeur.
Questions fréquentes
- Pourquoi ma page affiche-t-elle <b> comme du texte ?
- Le contenu a été échappé deux fois, le plus souvent parce que la règle de l'esperluette est passée après les autres, ou parce qu'une valeur déjà échappée en amont l'a été de nouveau par le gabarit. Trouvez la couche redondante plutôt que de décoder à la fin.
- Faut-il échapper les cinq caractères ?
- Dans le texte d'un élément, l'esperluette et les chevrons sont le minimum. Dans les valeurs d'attribut il faut aussi les guillemets, et comme les échappeurs savent rarement quel contexte ils alimentent, traiter les cinq est le choix par défaut sûr.