Tous les articles

XML Entities : échapper les caractères dans les documents XML

Comme le HTML, le XML utilise les chevrons et l'esperluette pour délimiter les balises, donc ces caractères ne peuvent pas apparaître tels quels dans le contenu texte — le document cesse d'être du XML valide, et l'analyseur s'arrête sur une erreur au lieu d'ignorer le problème.

Les cinq entités obligatoires

Contrairement au HTML, qui définit des centaines d'entités nommées, la spécification XML n'en exige que cinq :

  • &lt; — à la place de <
  • &gt; — à la place de >
  • &amp; — à la place de &
  • &apos; — à la place de l'apostrophe '
  • &quot; — à la place du guillemet double "

Les guillemets ne doivent être échappés qu'à l'intérieur des valeurs d'attribut, tandis que < et & doivent l'être partout dans le contenu texte.

Où cela se voit concrètement

La facturation électronique française via Chorus Pro repose sur des formats XML, et le nom d'une société contenant une esperluette — "Dupont & Fils" — invalide tout le document s'il n'est pas échappé. Le même problème touche les flux RSS des sites d'actualité : un titre d'article avec un & non échappé casse le flux entier pour tous les abonnés qui tentent de le lire.

Pourquoi XML est plus strict que HTML

Les navigateurs tolèrent généralement le HTML mal formé et essaient d'afficher la page malgré les erreurs. Les analyseurs XML ne font pas ça : une seule esperluette ou un chevron non échappé rend tout le document invalide, et le traitement s'arrête avec une erreur.

Quand en avoir besoin

  • Préparer un texte saisi par l'utilisateur avant de l'insérer dans un document XML (flux, fichiers de config, messages SOAP).
  • Diagnostic : voir le texte brut caché derrière les entités dans un XML reçu.
  • Modifier un fichier XML à la main sans casser la structure du document.

L'alternative aux entités : la section CDATA

Quand un bloc de texte contient beaucoup de caractères spéciaux — un fragment de HTML ou de code intégré dans du XML — il est souvent plus pratique de l'entourer de <![CDATA[...]]>, où < et & n'ont pas besoin d'être échappés et sont traités comme du texte brut. La seule exception est la séquence ]]>, qui ferme la section CDATA et ne peut donc pas apparaître dans son propre contenu.

Essayer l'outil