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

quels caractères doivent s'échapper dans les documents XML, ou Où puis-je trouver une telle liste?

798
demandé sur animuson 2009-07-07 16:07:42

9 réponses

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

XML caractères d'échappement

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 à W3C Markup Validation Service .

Texte

le moyen sûr est d'échapper à tous les cinq caractères dans le texte, cependant, les trois caractères " , ' et > ne doit pas être échappé dans le texte:

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

attributs

le moyen sûr est d'échapper aux cinq caractères dans les attributs, cependant, le caractère > ne doit pas être échappé dans les attributs:

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

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

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

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

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

commentaires

tous les 5 caractères spéciaux ne doit pas être échappé dans les commentaires:

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

CDATA

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

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

instructions de traitement

tous les 5 caractères spéciaux ne doit pas échapper aux instructions de traitement XML:

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

XML vs. HTML

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

1171
répondu Welbog 2017-02-02 13:27:27

peut-être que cela aidera:

liste des entités de caractères XML et HTML :

dans les documents SGML, HTML et XML, le les constructions logiques connu comme personnage les valeurs des données et des attributs consistent en: séquences de caractères, dans lesquelles chacun personnage peut se manifester directement (représentant lui-même), ou peut-être représenté par une série de caractères appelé un personnage de référence, dont il y a deux types: un numérique référence de caractère et un caractère entité de référence. Cet article répertorie le caractère des références d'entité que sont valides dans les documents HTML et XML.

cet article énumère les cinq entités XML prédéfinies suivantes:

quot  "
amp   &
apos  '
lt    <
gt    >
88
répondu Andrew Hare 2012-06-07 18:33:16

selon les spécifications du World Wide Web Consortium (w3C), il y a 5 caractères qui ne doivent pas apparaître dans 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 par l'entité correspondante, soit par la référence numérique selon le tableau suivant:

Caractère d'Origine entité XML de remplacement numérique XML de remplacement

< < <

>                               > >

" " "

& & &

' ' '

noter que les entités susmentionnées peuvent être utilisées aussi en HTML, à l'exception de '151970920" , qui a été introduit avec XHTML 1.0 et n'est pas déclaré en HTML 4. Pour cette raison, et pour assurer la rétrocompatibilité, la spécification XHTML recommande l'utilisation de à la place.

67
répondu Albz 2013-07-03 12:38:30
Les caractères D'échappement

sont différents pour les tags et les attributs.

pour 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 de l'ampère ( & ) et le support d'angle gauche ( < ) ne doivent pas apparaissent dans leur forme littérale, sauf s'ils sont utilisés comme délimiteurs du balisage, ou dans un commentaire, un instruction de traitement, ou une section CDATA. Si ils sont nécessaires ailleurs, ils doivent être échappés à l'aide numériques références de caractère ou les chaînes de caractères " & " et " < " respectivement. Le support d'angle droit ( > ) peut être représenté à l'aide de la chaîne">", et doit, pour des raisons de compatibilité, être échappée en utilisant soit "> "ou une référence de caractère lorsqu'il apparaît dans la chaîne de caractères" ]]> "dans le contenu, quand cette chaîne ne marque pas la fin D'un CDATA section.

à permettre aux valeurs d'attribut de contenir à la fois des guillemets simples et des guillemets doubles, le caractère apostrophe ou à guillemet unique (') peut être représenté comme " ", et le caractère de guillemets doubles (")" " ".

45
répondu Peter Bartels 2015-07-27 21:39:32

en plus des cinq caractères communément connus[<, >, &, ", '] j'éviterais aussi le caractère de l'onglet vertical (0x0B). Il est valide UTF-8, mais pas valide XML 1.0, et même de nombreuses bibliothèques (y compris libxml2) le manquent et produisent en silence un XML invalide.

19
répondu Charon ME 2012-04-25 18:23:37

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

Simplifié XML Échapper

  1. toujours (90% important à retenir)

    • Escape < as &lt; sauf si < commence un <tag/> .
    • Escape & comme &amp; à moins que & est le démarrage d'une &entity; .
  2. valeurs des attributs (9% important à retenir)

    • attr=" ' les guillemets simples ' sont acceptables avec des guillemets doubles. "
    • attr=' "1519110920 des" guillemets " sont ok à l'intérieur des guillemets simples. '
    • Escape " comme &quot; et ' comme &apos; dans le cas contraire.
  3. Comments"" , Instructions de traitement CDATA et (0.9% important à retenir)

    • <!-- à l'Intérieur commentaires --> rien n'a à être échappé, mais pas de -- les chaînes de caractères sont autorisés.
    • <![CDATA[ dans CDATA ]]> rien ne doit être échappé, mais aucune corde ]]> n'est permise.
    • <?PITarget à l'Intérieur PIs ?> rien n'a échappé, mais pas de ?> les chaînes de caractères sont autorisés.
  4. Esoterica (0.1% important à retenir)

    • Escape ]]> comme ]]&gt; à moins que ]]> à la fin d'une section CDATA.

      (cette règle s'applique aux données de caractère en général – même en dehors d'une section CDATA.)
10
répondu kjhughes 2018-06-03 13:34:55

Abrégé 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 par une référence 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 soit échappés ou directs:

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

4
répondu Tim Cooper 2014-08-15 07:53:58

cela dépend du contexte. Pour le contenu, c'est < et &, et ]]>(si la chaîne du 3 au lieu d'un char). Pour les valeurs d'attribut, c'est < et & et "et". Pour CDATA, c'est ]]>.

3
répondu 把友情留在无盐 2015-06-04 14:36:52

Seulement < et & sont nécessaires pour être échappé si l'être traitées de données de caractère et pas la balise:

http://www.w3.org/TR/xml11/#syntax

-3
répondu Questionless 2014-04-02 14:17:38