Welche Zeichen müssen in XML-Dokumenten maskiert werden, oder wo kann ich eine solche Liste finden?
Welche Zeichen müssen in XML-Dokumenten maskiert werden, oder wo kann ich eine solche Liste finden?
Antworten:
Wenn Sie eine geeignete Klasse oder Bibliothek verwenden, übernehmen diese die Flucht für Sie. Viele XML-Probleme werden durch die Verkettung von Zeichenfolgen verursacht.
Es gibt nur fünf:
" "
' '
< <
> >
& &
Das Escapezeichen hängt davon ab, wo das Sonderzeichen verwendet wird.
Die Beispiele können beim W3C Markup Validation Service validiert werden .
Der sichere Weg besteht darin, alle fünf Zeichen im Text zu maskieren. Allerdings sind die drei Zeichen "
, '
und >
müssen nicht in Text entwertet werden:
<?xml version="1.0"?>
<valid>"'></valid>
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 nicht in Attributen maskiert werden, wenn die Anführungszeichen lauten "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Ebenso muss das "
nicht in Attributen maskiert werden, wenn die Anführungszeichen sind '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Alle fünf Sonderzeichen dürfen in Kommentaren nicht maskiert werden:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Alle fünf Sonderzeichen dürfen in CDATA- Abschnitten nicht maskiert werden:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Alle fünf Sonderzeichen dürfen in XML-Verarbeitungsanweisungen nicht maskiert werden:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML verfügt über einen eigenen Satz von Escape-Codes, die viel mehr Zeichen enthalten.
"
werden geändert in&quot;
Vielleicht hilft das:
Liste der Entitätsreferenzen für XML- und HTML-Zeichen :
In SGML-, HTML- und XML-Dokumenten bestehen die als Zeichendaten und Attributwerte bekannten logischen Konstrukte aus Zeichenfolgen, in denen sich jedes Zeichen direkt manifestieren (sich selbst darstellen) oder durch eine Reihe von Zeichen dargestellt werden kann, die als Zeichenreferenz bezeichnet werden. Davon gibt es zwei Typen: eine numerische Zeichenreferenz und eine Zeichenentitätsreferenz. Dieser Artikel listet die Zeichenentitätsreferenzen 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 >
Gemäß den Spezifikationen des World Wide Web Consortium (w3C) dürfen in einem XML-Dokument 5 Zeichen nicht in ihrer wörtlichen Form erscheinen , es sei denn, sie werden als Markup-Begrenzer oder in einem Kommentar, einer Verarbeitungsanweisung oder einem CDATA-Abschnitt verwendet . 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:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
Beachten Sie, dass die oben genannten Entitäten mit Ausnahme von & apos; auch in HTML verwendet werden können. , das mit XHTML 1.0 eingeführt wurde und in HTML 4 nicht deklariert ist. Aus diesem Grund und um die Retro-Kompatibilität zu gewährleisten, empfiehlt die XHTML-Spezifikation die Verwendung von & # 39; stattdessen.
>
muss maskiert werden, wenn es ]]
innerhalb des Inhalts folgt , es sei denn, es soll Teil des ]]>
Trennzeichens sein, das das Ende eines CDATA-Abschnitts angibt.
Das Escaping von Zeichen unterscheidet sich für Tags und Attribute.
Für Tags:
< <
> > (only for compatibility, read below)
& &
Für Attribute:
" "
' '
Aus Zeichendaten und Markup :
Das kaufmännische Und-Zeichen (&) und die linke spitze Klammer (<) dürfen nicht in ihrer wörtlichen Form erscheinen, es sei denn, sie werden als Markup-Begrenzer oder in einem Kommentar, einer Verarbeitungsanweisung oder einem CDATA-Abschnitt verwendet. Wenn sie an anderer Stelle benötigt werden, müssen sie entweder mit numerischen Zeichenreferenzen oder mit den Zeichenfolgen "& amp;" bzw. "& lt;" maskiert werden. Die rechtwinklige 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 erscheint. wenn diese Zeichenfolge nicht das Ende eines CDATA-Abschnitts markiert.
Damit Attributwerte sowohl einfache als auch doppelte Anführungszeichen enthalten können, kann das Apostroph- oder einfache Anführungszeichen (') als "& apos;" und das doppelte Anführungszeichen (") als" & quot; ".
Neue, vereinfachte Antwort auf eine alte, häufig gestellte Frage ...
Immer (90% wichtig zu merken)
Attributwerte (9% wichtig zu beachten)
attr="
'
Einfache Anführungszeichen '
sind in doppelten Anführungszeichen in Ordnung."
attr='
"
Doppelte Anführungszeichen "
sind in einfachen Anführungszeichen in Ordnung.'
"
wie "
und '
wie '
sonst.Kommentare , CDATA und Verarbeitungsanweisungen (0,9% wichtig zu beachten)
<!--
Innerhalb von Kommentaren 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.Esoterik (0,1% wichtig zu beachten)
]]>
als ]]>
es ]]>
sei denn , ein CDATA-Abschnitt wird beendet. ]]>
muss als maskiert werden ]]>
, auch wenn sie sich nicht in einem CDATA-Abschnitt befindet. Der einfachste Weg, dies zu erreichen, besteht darin, immer>
als zu entkommen >
.
]]>
, mich aber dafür entschieden, sie in die Esoterik zu verbannen, anstatt vorzuschlagen, dass sie >
immer entkommen soll (was, wie Sie wissen, nicht sein muss). Mein Ziel hier ist es, die XML-Escape-Regeln leicht zu merken und 100% genau zu machen .
AttValue
in meiner Antwort über einen Link auf 2. Attributwerte zitiert wird .
Zusätzlich zu den allgemein bekannten fünf Zeichen [<,>, &, "und '] würde ich auch das vertikale Tabulatorzeichen (0x0B) umgehen. Es ist gültiges UTF-8, aber kein gültiges XML 1.0 und sogar viele Bibliotheken (einschließlich der hoch portablen (ANSI C) Bibliothek libxml2 ) vermissen es und geben stillschweigend ungültiges XML aus.
Auszug aus: XML, Escaping
Es gibt fünf vordefinierte Entitäten:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Alle zulässigen Unicode-Zeichen können mit einer numerischen Zeichenreferenz dargestellt werden." Zum Beispiel:
中
Die meisten Steuerzeichen und anderen Unicode-Bereiche sind ausdrücklich ausgeschlossen, was bedeutet (glaube ich), dass sie weder maskiert noch direkt auftreten können:
Das hängt vom Kontext ab. Für den Inhalt ist es < und & und ]]> (obwohl eine Zeichenfolge aus drei statt einem Zeichen).
Für Attributwerte ist es < , & , " und ' .
Für CDATA ist es ]]> .
Nur <
und &
müssen maskiert werden, wenn Zeichendaten und kein Markup behandelt werden sollen:
<company>AT&T</company>