it-swarm.com.de

Welche Zeichen brauche ich, um in XML-Dokumenten zu entkommen?

Welche Zeichen müssen in XML-Dokumenten maskiert werden, oder wo kann ich eine solche Liste finden?

876
Julius A

Wenn Sie eine geeignete Klasse oder Bibliothek verwenden, übernimmt diese die Flucht für Sie. Viele XML-Probleme werden durch die Verkettung von Zeichenfolgen verursacht.

XML-Escapezeichen

Es gibt nur fünf:

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

Das Ausblenden von Zeichen hängt davon ab, wo das Sonderzeichen verwendet wird.

Die Beispiele können unter W3C Markup Validation Service validiert werden.

Text

Der sichere Weg besteht darin, alle fünf Zeichen im Text zu maskieren. Die drei Zeichen ", ' und > müssen jedoch nicht im Text maskiert werden:

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

Attribute

Der sichere Weg besteht darin, alle fünf Zeichen in Attributen zu maskieren. Das Zeichen > muss jedoch nicht in Attributen maskiert werden:

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

Das Zeichen ' muss in Attributen nicht maskiert werden, wenn die Anführungszeichen " sind:

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

Ebenso muss der " nicht in Attributen maskiert werden, wenn die Anführungszeichen ' sind:

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

Bemerkungen

Alle 5 Sonderzeichen dürfen nicht ​​in Kommentaren maskiert werden:

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

CDATA

Alle 5 Sonderzeichen dürfen nicht ​​in CDATA Abschnitten maskiert werden:

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

Verarbeitungsanweisungen

Alle 5 Sonderzeichen dürfen nicht ​​in XML-Verarbeitungsanweisungen maskiert werden:

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

XML vs. HTML

HTML hat einen eigenen Satz von Escape-Codes , der viel mehr Zeichen abdeckt.

1283
Welbog

Vielleicht hilft das:

Liste der Verweise auf XML- und HTML-Zeichenentitäten :

In SGML-, HTML- und XML-Dokumenten bestehen die als Zeichendaten und Attributwerte bekannten logischen Konstrukte aus Zeichenfolgen, in denen sich jedes Zeichen direkt manifestieren (selbst darstellen) oder durch eine Reihe von Zeichen dargestellt werden kann, die als Zeichenreferenz bezeichnet wird. Es gibt zwei Typen: eine numerische Zeichenreferenz und eine Zeichenentitätsreferenz. Dieser Artikel listet die Zeichenentitätsverweise auf, die in HTML- und XML-Dokumenten gültig sind.

In diesem Artikel werden die folgenden fünf vordefinierten XML-Entitäten aufgeführt:

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

Gemäß den Spezifikationen des World Wide Web Consortium (w3C) gibt es 5 Zeichen, die in einem XML-Dokument nicht in ihrer wörtlichen Form erscheinen dürfen , es sei denn, sie werden als Markup-Trennzeichen oder verwendet innerhalb eines Kommentars, einer Verarbeitungsanweisung oder eines CDATA-Abschnitts. In allen anderen Fällen müssen diese Zeichen entweder durch die entsprechende Entität oder durch die numerische Referenz gemäß der folgenden Tabelle ersetzt werden:

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

Beachten Sie, dass die oben genannten Entitäten mit Ausnahme von apos; , das mit XHTML 1.0 eingeführt und in HTML 4 nicht deklariert wurde, auch in HTML verwendet werden können Aus diesem Grund wird in der XHTML-Spezifikation stattdessen die Verwendung von empfohlen, um die Retro-Kompatibilität zu gewährleisten.

71
Albz

Das Escaping von Zeichen unterscheidet sich für Tags und Attribute.

Für Tags:

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

Für Attribute:

" &quot;
' &apos;

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

Das kaufmännische Und () und die linke spitze Klammer (<) dürfen nicht in ihrer wörtlichen Form angezeigt werden, es sei denn, sie werden als Markup-Begrenzer oder in Kommentaren, Verarbeitungsanweisungen oder CDATA-Abschnitten verwendet. Wenn sie an anderer Stelle benötigt werden, müssen sie entweder mit numerischen Zeichenreferenzen oder den Zeichenfolgen "amp;" und "lt;" Die eckige Klammer (>) kann mit der Zeichenfolge "gt;" dargestellt werden und muss aus Kompatibilitätsgründen entweder mit "gt;" oder einer Zeichenreferenz maskiert werden, wenn sie in der Zeichenfolge "]]>" im Inhalt enthalten ist. Wenn diese Zeichenfolge das Ende eines CDATA-Abschnitts nicht markiert.

Um zuzulassen, dass Attributwerte sowohl einfache als auch doppelte Anführungszeichen enthalten, können das Apostroph oder das einfache Anführungszeichen (') als "Anführungszeichen" und das doppelte Anführungszeichen (") als" Anführungszeichen "dargestellt werden. ".

49
Peter Bartels

Neue, vereinfachte Antwort auf eine alte, häufig gestellte Frage ...

Vereinfachtes XML-Escaping  (priorisiert, 100% vollständig)

  1. Immer (90% wichtig zu beachten)

    • Escape _<_ as _&lt;_ es sei denn, _<_ startet ein <tag/> .
    • Escape _&_ as _&amp;_ es sei denn, _&_ startet ein &entity; .
  2. Attributwerte  (9% wichtig zu beachten)

    • _attr="'_ Einfache Anführungszeichen _'_ sind in doppelten Anführungszeichen zulässig ._"_
    • _attr='"_ Doppelte Anführungszeichen _"_ sind in einfachen Anführungszeichen zulässig ._'_
    • Escape _"_ als _&quot;_ und _'_ als _&apos;_ ansonsten.
  3. Kommentare , CDATA und Verarbeitungsanweisungen  (0,9% wichtig, um sich zu erinnern)

    • _<!--_ Innerhalb von Kommentare _-->_ muss nichts maskiert werden, aber es sind keine _--_ Zeichenfolgen zulässig.
    • _<![CDATA[_ Innerhalb von CDATA _]]>_ muss nichts maskiert werden, aber es sind keine _]]>_ Zeichenfolgen zulässig.
    • _<?PITarget_ Innerhalb von PIs _?>_ muss nichts maskiert werden, aber es sind keine _?>_ Zeichenfolgen zulässig.
  4. Esoterica (0,1% wichtig zu beachten)

    • Escape _]]>_ as _]]&gt;_, es sei denn, _]]>_ beendet einen CDATA-Abschnitt.
      (Diese Regel gilt im Allgemeinen für Zeichendaten - auch außerhalb eines CDATA-Abschnitts.)
25
kjhughes

zusätzlich zu den allgemein bekannten fünf Zeichen [<,>, &, ", '] würde ich auch das vertikale Tabulatorzeichen (0x0B) umgehen. Es ist gültig UTF-8, aber nicht gültig XML 1.0, und sogar viele Bibliotheken (einschließlich libxml2) vermisse es und gib im Hintergrund ungültiges XML aus.

23
Charon ME

Kurzform: http://en.wikipedia.org/wiki/XML#Escaping

Es gibt fünf vordefinierte Entitäten:

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

"Alle zulässigen Unicode-Zeichen können mit einer numerischen Zeichenreferenz dargestellt werden." Zum Beispiel:

&#20013;

Die meisten Steuerzeichen und anderen Unicode-Bereiche sind ausdrücklich ausgeschlossen, was bedeutet (glaube ich), dass sie weder mit Escapezeichen noch direkt vorkommen können:

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

6
Tim Cooper

Es kommt auf den Kontext an. Für den Inhalt ist es <und &, und]]> (obwohl Zeichenfolge von 3 anstelle eines Zeichens). Bei Attributwerten ist es <und & und "und '. Bei CDATA ist es]]>.