Quels caractères doivent être échappés dans les documents XML, ou où puis-je trouver une telle liste?
Quels caractères doivent être échappés dans les documents XML, ou où puis-je trouver une telle liste?
Réponses:
Si vous utilisez une classe ou une bibliothèque appropriée, ils feront l'échappement pour vous. De nombreux problèmes XML sont dus à la concaténation de chaînes.
Il n'y en a que cinq:
" "
' '
< <
> >
& &
Les caractères d'échappement dépendent de l'endroit où le caractère spécial est utilisé.
Les exemples peuvent être validés auprès du service de validation de balisage W3C .
Le moyen sûr consiste à échapper aux cinq caractères du texte. Cependant, les trois personnages "
, '
et >
n'a pas besoin d' être échappé dans le texte:
<?xml version="1.0"?>
<valid>"'></valid>
Le moyen sûr consiste à échapper aux cinq caractères dans les attributs. Cependant, le >
caractère n'a pas besoin d'être échappé dans les attributs:
<?xml version="1.0"?>
<valid attribute=">"/>
Le '
caractère ne doit pas être échappé dans les attributs si les guillemets sont "
:
<?xml version="1.0"?>
<valid attribute="'"/>
De même, il "
n'est pas nécessaire d'échapper les attributs si les guillemets sont '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Les cinq caractères spéciaux ne doivent pas être échappés dans les commentaires:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Les cinq caractères spéciaux ne doivent pas être échappés dans les sections CDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Les cinq caractères spéciaux ne doivent pas être échappés dans les instructions de traitement XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML a son propre ensemble de codes d'échappement qui couvrent beaucoup plus de caractères.
"
seront changées en&quot;
Peut-être que cela aidera:
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ères et valeurs d'attributs sont constituées de séquences de caractères, dans lesquelles chaque caractère peut se manifester directement (se représenter lui-même) ou ê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 qui sont 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 >
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, une instruction de traitement ou une section CDATA . Dans tous les autres cas, ces caractères doivent être remplacés soit en utilisant l'entité correspondante, soit la référence numérique selon le tableau suivant:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
Notez que les entités susmentionnées peuvent également être utilisées en HTML, à l'exception de & apos; , qui a été introduit avec XHTML 1.0 et n'est pas déclaré en HTML 4. Pour cette raison, et pour garantir la rétrocompatibilité, la spécification XHTML recommande l'utilisation de & # 39; au lieu.
>
doit être échappé s'il suit ]]
dans le contenu, sauf s'il est destiné à faire partie du ]]>
délimiteur qui indique la fin d'une section CDATA.
Les caractères d'échappement sont différents pour les balises et les attributs.
Pour les tags:
< <
> > (only for compatibility, read below)
& &
Pour les attributs:
" "
' '
À partir des données de personnage et du balisage :
Le caractère esperluette (&) et le crochet angulaire gauche (<) ne doivent pas apparaître dans 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 nécessaires ailleurs, ils doivent être échappés à l'aide des références de caractères numériques ou des chaînes "& amp;" et "& lt;" respectivement. Le crochet à angle droit (>) peut être représenté à l'aide de la chaîne "& gt;" et doit, pour des raisons de compatibilité, être échappé à l'aide de "& gt;" ou d'une référence de caractère lorsqu'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'attribut de contenir à la fois des guillemets simples et doubles, l'apostrophe ou le caractère guillemet simple (') peut être représenté comme "& apos;", et le caractère guillemet double (") comme" & quot; ".
Nouvelle réponse simplifiée à une ancienne question fréquemment posée ...
Toujours (90% important à retenir)
Valeurs d'attribut (9% important à retenir)
attr="
'
Les guillemets simples '
sont corrects entre guillemets doubles."
attr='
"
Les guillemets doubles "
sont acceptables dans les guillemets simples.'
"
comme "
et '
que le '
contraire.Commentaires , CDATA et instructions de traitement (0,9% important à retenir)
<!--
Dans les 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 les PI, ?>
rien ne doit être échappé, mais aucune ?>
chaîne n'est autorisée.Ésotérique (0,1% important à retenir)
]]>
comme à ]]>
moins que ne ]]>
se termine une section CDATA. ]]>
doit être échappée car ]]>
, même lorsqu'elle n'est pas dans une section CDATA. Le moyen le plus simple d'y parvenir est de toujours s'échapper en >
tant que >
.
]]>
mais j'ai choisi de la reléguer à l'ésotérique plutôt que de suggérer de >
toujours échapper (ce qui n'est pas nécessaire, comme vous le savez). Mon objectif ici est de rendre les règles d'échappement XML facilement mémorisables et 100% précises .
AttValue
citée dans ma réponse via un lien sur 2. Valeurs d'attribut .
En plus des cinq caractères connus [<,>, &, "et '], j'échapperais également au caractère de tabulation verticale (0x0B). Il s'agit d'un UTF-8 valide, mais pas d'un XML 1.0 valide, et même de nombreuses bibliothèques (y compris la bibliothèque hautement portable (ANSI C) libxml2 ) le manque et génère silencieusement du XML invalide.
Abrégé de: XML, Escaping
Il existe cinq entités prédéfinies:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Tous les caractères Unicode autorisés peuvent être représentés avec une référence numérique." Par exemple:
中
La plupart des caractères de contrôle et des autres plages Unicode sont spécifiquement exclus, ce qui signifie (je pense) qu'ils ne peuvent pas se produire ni échappés ni directs:
Ça dépend du contexte. Pour le contenu, c'est < et & , et ]]> (bien qu'une chaîne de trois au lieu d'un caractère).
Pour les valeurs d'attribut, il s'agit de < , & , " et ' .
Pour CDATA, c'est ]]> .
Uniquement <
et &
doivent être échappés s'ils doivent être traités des données de caractère et non du balisage:
<company>AT&T</company>