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


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


783
2017-07-07 12:07


Ursprung


Antworten:


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

XML-Escape-Zeichen

Es gibt nur fünf:

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

Escaping-Zeichen hängen davon ab, wo das Sonderzeichen verwendet wird.

Die Beispiele können unter validiert werden W3C Markup Validierungsdienst.

Text

Der sichere Weg ist, alle fünf Zeichen im Text zu entkommen, jedoch die drei Zeichen ", ' und > muss nicht im Text entkommen sein:

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

Attribute

Der sichere Weg ist, alle fünf Zeichen in Attributen zu entkommen, jedoch die > Charakter muss in Attributen nicht maskiert werden:

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

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

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

Ebenso, die " müssen nicht in Attributen maskiert werden, wenn die Zitate sind ':

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

Bemerkungen

Alle 5 Sonderzeichen darf nicht in Kommentaren entkommen sein:

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

CDATA

Alle 5 Sonderzeichen darf nicht entkamen werden CDATA Abschnitte:

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

Verarbeitungsanweisungen

Alle 5 Sonderzeichen darf nicht in XML-Verarbeitungsanweisungen maskiert werden:

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

XML im Vergleich zu HTML

HTML hat eine eigene Reihe von Escape-Codes die viel mehr Charaktere abdecken.


1153
2017-07-07 12:09



Vielleicht hilft das:

Liste der XML- und HTML-Zeichenentitätsverweise:

In SGML, HTML und XML Dokumenten, die   logische Konstrukte, die als Zeichen bezeichnet werden   Daten und Attributwerte bestehen aus   Sequenzen von Zeichen, in denen jeweils   Charakter kann sich direkt manifestieren   (sich selbst darstellend), oder kann sein   repräsentiert durch eine Reihe von Zeichen   eine Zeichenreferenz genannt, von welcher   Es gibt zwei Arten: eine numerische   Zeichenreferenz und ein Zeichen   Entitätsreferenz. Dieser Artikel listet auf   Die Zeichenentität verweist darauf   sind in HTML- und XML-Dokumenten gültig.

Dieser Artikel listet die folgenden fünf vordefinierten XML-Entitäten auf:

quot  "
amp   &
apos  '
lt    <
gt    >

87
2017-07-07 12:09



Gemäß den Spezifikationen des World Wide Web Consortiums (w3C), Es gibt 5 Zeichen, die nicht in ihrer literalen Form in einem XML-Dokument erscheinen dürfen, außer wenn sie als Markup-Trennzeichen oder in einem Kommentar, einer Verarbeitungsanweisung oder einem CDATA-Abschnitt verwendet werden. In allen anderen Fällen müssen diese Zeichen entweder durch die entsprechende Entität oder die numerische Referenz gemäß der folgenden Tabelle ersetzt werden:

Ursprünglicher CharakterXML-EntitätsaustauschXML-numerischer Ersatz
<& lt;<
>& gt;>
"& quot;"
&&Ampere;&
"& apos;"

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


65
2017-07-03 12:38



Escaping-Zeichen unterscheiden 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-Zeichen (&) und die linke spitze Klammer (<) dürfen nicht   in ihrer literalen Form erscheinen, außer wenn sie als Markup-Trennzeichen verwendet werden,   oder in einem Kommentar, einer Verarbeitungsanweisung oder einem CDATA-Abschnitt. Ob   Sie werden an anderer Stelle benötigt. Sie müssen entweder mit numerischen Werten entschlüsselt werden   Zeichenreferenzen oder die Zeichenfolgen "& amp;" und "& lt;"   beziehungsweise. Die rechte spitze Klammer (>) kann mit der Taste dargestellt werden   string "& gt;" und muss aus Kompatibilitätsgründen entweder mit Escapezeichen versehen werden   "& gt;" oder eine Zeichenreferenz, wenn sie in der Zeichenfolge "]]> erscheint   "Inhaltlich, wenn diese Zeichenfolge nicht das Ende einer CDATA markiert   Sektion.

Um zuzulassen, dass Attributwerte sowohl einfache als auch doppelte Anführungszeichen enthalten,   Der Apostroph oder das einfache Anführungszeichen (') kann wie folgt dargestellt werden:   & apos; "und das doppelte Anführungszeichen (") als "".


44
2018-02-05 10:03



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


19
2018-04-25 13:38



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

Vereinfachtes XML-Escaping

  1. Immer  (90% wichtig zu erinnern)

    • Flucht < wie &lt; es sei denn < beginnt ein <tag/>.
    • Flucht & wie &amp; es sei denn & beginnt ein &entity;.
  2. Attributwerte  (9% wichtig zu erinnern)

    • attr="  'Einzelzitate' sind ok in Anführungszeichen."
    • attr='  "Anführungszeichen" sind in einfachen Anführungszeichen in Ordnung.'
    • Flucht " wie &quot; und ' wie &apos; Andernfalls.
  3. Bemerkungen, CDATA, und Verarbeitungsanweisungen  (0,9% wichtig, um sich zu erinnern)

    • <!-- Innerhalb Bemerkungen  --> nichts muss entgangen sein, aber nein -- Zeichenfolgen sind erlaubt.
    • <![CDATA[ Innerhalb CDATA  ]]> Nichts muss entkommen, aber nein ]]> Zeichenfolgen sind erlaubt.
    • <?PITarget Innerhalb PIs  ?> Nichts muss entkommen, aber nein ?> Zeichenfolgen sind erlaubt.
  4. Esoterik  (0,1% wichtig zu merken)

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

9
2017-10-09 01:54



Gekürzt von: 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 erlaubten Unicode-Zeichen können durch eine numerische Zeichenreferenz dargestellt werden." Zum Beispiel:

&#20013;

Die meisten Steuerzeichen und andere Unicode-Bereiche sind ausdrücklich ausgeschlossen, dh (ich denke, sie können weder maskiert noch direkt auftreten):

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


4
2017-08-15 07:53



Es hängt vom Kontext ab. Für den Inhalt ist es <und &, und]]> (obwohl String von 3 anstelle von einem Zeichen). Für Attributwerte ist <und & und "und". Für CDATA ist es]]>.


3
2018-06-04 14:36