web-dev-qa-db-fra.com

De quels caractères ai-je besoin pour échapper dans les documents XML?

Quels caractères doivent être échappés dans les documents XML ou où pourrais-je trouver une telle liste?

876
Julius A

Si vous utilisez une classe ou une bibliothèque appropriée, ils effectueront l'échappement pour vous. De nombreux problèmes XML sont causés par la concaténation de chaînes.

Caractères d'échappement XML

Il n'y en a que cinq:

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

Les caractères d'échappement dépendent de l'endroit où le caractère spécial est utilisé.

Les exemples peuvent être validés à service de validation de balisage du W3C .

Texte

Le moyen le plus sûr est d'échapper aux cinq caractères du texte. Toutefois, les trois caractères ", ' et > ne doivent pas être échappés dans le texte:

<?xml version="1.0"?>
<valid>"'></valid>

Les attributs

Le moyen le plus sûr est d'échapper aux cinq caractères des attributs. Toutefois, le caractère > ne doit pas nécessairement être échappé des attributs:

<?xml version="1.0"?>
<valid attribute=">"/>

Le caractère ' n'a pas besoin d'être échappé dans les attributs si les guillemets sont ":

<?xml version="1.0"?>
<valid attribute="'"/>

De même, le " ne doit pas être échappé dans les attributs si les guillemets sont ':

<?xml version="1.0"?>
<valid attribute='"'/>

Commentaires

Les 5 caractères spéciaux ne doivent pas être échappés dans les commentaires:

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

CDATA

Les 5 caractères spéciaux ne doivent pas être échappés dans les sections CDATA :

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>

Instructions de traitement

Les 5 caractères spéciaux ne doivent pas être échappés des instructions de traitement XML:

<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>

XML vs HTML

HTML a son propre ensemble de codes d'échappement qui couvre beaucoup plus de caractères.

1283
Welbog

Cela aidera peut-être:

Liste des références d'entités de caractères XML et HTML :

Dans les documents SGML, HTML et XML, les constructions logiques appelées données de caractère et valeurs d'attribut consistent en des séquences de caractères dans lesquelles chaque caractère peut se manifester directement (se représenter) ou peut être représenté par une série de caractères appelée référence de caractère, dont il existe deux types: une référence de caractère numérique et une référence d’entité de caractère. Cet article répertorie les références d'entité de caractère valides dans les documents HTML et XML.

Cet article répertorie les cinq entités XML prédéfinies suivantes:

quot  "
amp   &
apos  '
lt    <
gt    >
90
Andrew Hare

Selon les spécifications du World Wide Web Consortium (W3C), il y a 5 caractères qui ne doivent pas apparaître sous leur forme littérale dans un document XML , sauf lorsqu'ils sont utilisés comme délimiteurs de balisage ou dans un commentaire, instruction de traitement, ou une section CDATA. Dans tous les autres cas, ces caractères doivent être remplacés à l'aide de l'entité correspondante ou de la référence numérique conformément au tableau suivant:

Original CharacterXML entity replacementXML numeric replacement
<                              &lt;                                    &#60;                                    
>                              &gt;                                   &#62;                                    
"                               &quot;                               &#34;                                    
&                              &amp;                               &#38;                                    
'                               &apos;                               &#39;                                    

Notez que les entités susmentionnées peuvent également être utilisées en HTML, à l'exception de apos; , introduit avec XHTML 1.0 et non déclaré en HTML 4. Pour cette raison, et pour assurer la rétro-compatibilité, la spécification XHTML recommande l'utilisation de # 39; .

71
Albz

Les caractères d'échappement sont différents pour les balises et les attributs.

Pour les tags:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;

Pour les attributs:

" &quot;
' &apos;

http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

Le caractère et commercial () et le crochet angulaire gauche (<) ne doivent pas apparaître sous leur forme littérale, sauf lorsqu'ils sont utilisés comme délimiteurs de balisage, ou dans un commentaire, une instruction de traitement ou une section CDATA. S'ils sont utilisés ailleurs, ils doivent être échappés en utilisant soit des références de caractères numériques, soit les chaînes "amp" et "lt;" respectivement. Le crochet (>) peut être représenté avec la chaîne "gt;" et doit être échappé pour des raisons de compatibilité avec "gt;" ou une référence de caractère s’il apparaît dans la chaîne "]]>" dans le contenu, lorsque cette chaîne ne marque pas la fin d'une section CDATA.

Pour permettre aux valeurs d'attributs de contenir à la fois des guillemets simples et doubles, le caractère apostrophe ou guillemet simple (') peut être représenté par "apos;" et le caractère de guillemet double (") par" quot; ".

49
Peter Bartels

Nouvelle réponse simplifiée à une ancienne question fréquemment posée ...

Échappement XML simplifié  (hiérarchisé, terminé à 100%)

  1. toujours (90% important à retenir)

    • Echap _<_ comme _&lt;_ sauf si _<_ commence un <tag/> .
    • Echap _&_ comme _&amp;_ sauf si _&_ commence un &entity; .
  2. Valeurs d'attribut  (9% important à retenir)

    • _attr="_ _'_ guillemets simples _'_ sont ok entre guillemets doubles ._"_
    • _attr='_ _"_ Les guillemets doubles _"_ sont corrects entre guillemets simples ._'_
    • Escape _"_ comme _&quot;_ et _'_ comme _&apos;_ sinon.
  3. Commentaires , CDATA , et Instructions de traitement  (0,9% important à retenir)

    • _<!--_ Dans commentaires _-->_ rien ne doit être échappé mais aucune chaîne _--_ n'est autorisée.
    • _<![CDATA[_ Dans CDATA _]]>_ rien ne doit être échappé, mais aucune chaîne _]]>_ n'est autorisée.
    • _<?PITarget_ Dans PIs _?>_ rien ne doit être échappé, mais aucune chaîne _?>_ n'est autorisée.
  4. Esoterica (0,1% important à retenir)

    • Echap _]]>_ comme _]]&gt;_ sauf si _]]>_ termine une section CDATA.
      (Cette règle s'applique aux données de personnage en général - même en dehors d'une section CDATA.)
25
kjhughes

en plus des cinq caractères connus [<,>, &, ", '], je voudrais également échapper au caractère de tabulation verticale (0x0B). Il est valide UTF-8, mais non valide XML 1.0, et même de nombreuses bibliothèques (y compris libxml2) le manque et génère en mode silencieux un XML invalide.

23
Charon ME

Version abrégée de: http://en.wikipedia.org/wiki/XML#Escaping

Il y a cinq entités prédéfinies:

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "

"Tous les caractères Unicode autorisés peuvent être représentés avec une référence de caractère numérique." Par exemple:

&#20013;

La plupart des caractères de contrôle et autres plages unicode sont spécifiquement exclus, ce qui signifie (je pense) qu'ils ne peuvent pas se produire en mode échappé ni en direct:

http://en.wikipedia.org/wiki/Valid_characters_in_XML

6
Tim Cooper

Ça dépend du contexte. Pour le contenu, il s'agit de <et &, et de]]> (bien que chaîne de 3 au lieu d'un caractère). Pour les valeurs d'attributs, il s'agit de <et & et "et '. Pour CDATA, c'est]]>.

3