XML文档中必须转义哪些字符,或者在哪里可以找到这样的列表?
如果您使用适当的类或库,他们会为您执行转义。许多XML问题是由字符串连接引起的。
只有五个:
" "' '< <> >& &
转义字符取决于使用特殊字符的位置。
示例可以在W3C标记验证服务处验证。
安全的方法是转义文本中的所有五个字符。但是,三个字符"、'和>不必在文本中转义:
"
'
>
<?xml version="1.0"?><valid>"'></valid>
安全的方法是转义属性中的所有五个字符。但是,>字符不必在属性中转义:
<?xml version="1.0"?><valid attribute=">"/>
如果引号为",则'字符不必在属性中转义:
<?xml version="1.0"?><valid attribute="'"/>
同样,如果引号为',则"不必在属性中转义:
<?xml version="1.0"?><valid attribute='"'/>
所有五个特殊字符绝不能都在注释中转义:
<?xml version="1.0"?><valid><!-- "'<>& --></valid>
所有五个特殊字符绝不能都在CDATA部分中转义:
<?xml version="1.0"?><valid><![CDATA["'<>&]]></valid>
所有五个特殊字符绝不能都在XML处理指令中转义:
<?xml version="1.0"?><?process <"'&> ?><valid/>
超文本标记语言有自己的一套转义码,它涵盖了更多的字符。
也许这将有助于:
XML和超文本标记语言字符实体引用列表:
在SGML、超文本标记语言和XML文档中称为字符的逻辑结构数据和属性值由字符序列,其中每个角色可以直接显化(代表自己),或者可以是由一系列字符表示称为字符引用,其中有两种类型:数字字符引用和字符实体参考。本文列出字符实体引用在超文本标记语言和XML文档中有效。
本文列出了以下五个预定义的XML实体:
quot "amp &apos 'lt <gt >
除了常见的五个字符[<;, >, &;、"和']之外,我还会转义垂直制表符(0x0B)。它是有效的UTF-8,但不是有效的XML 1.0,甚至许多库(包括高度可移植(ANSI C)库libxml2)也会错过它并默默输出无效的XML。
根据万维网联盟(w3C)有5个字符不能以其文字形式出现在XML文档中的规范,除非用作标记分隔符或注释、处理指令或CDATA部分中。在所有其他情况下,这些字符必须使用相应的实体或数字引用替换,如下表所示:
原始字符XML实体替换XML数字替换<<<>>>"""&&&'''
请注意,上述实体也可以在超文本标记语言中使用,除了',它是在XHTML 1.0中引入的,并且没有在超文本标记语言4中声明。
对于标签和属性,转义字符是不同的。
对于标签:
< <> > (only for compatibility, read below)& &
对于属性:
" "' '
从字符数据和标记:
与号字符(&)和左尖括号(<)不得以文字形式出现,除非用作标记分隔符,或者在注释、处理指令或CDATA部分中。如果它们在其他地方需要,它们必须使用任一数字进行转义字符引用或字符串“&”和“<”右尖括号(>)可以用字符串“>”,并且为了兼容性,必须使用">"或字符串中出现的字符引用"]]>"在内容中,当该字符串未标记CDATA的结束时部分。 要允许属性值同时包含单引号和双引号,撇号或单引号字符(')可以表示为“'",双引号字符(")为"""。
与号字符(&)和左尖括号(<)不得以文字形式出现,除非用作标记分隔符,或者在注释、处理指令或CDATA部分中。如果它们在其他地方需要,它们必须使用任一数字进行转义字符引用或字符串“&”和“<”右尖括号(>)可以用字符串“>”,并且为了兼容性,必须使用">"或字符串中出现的字符引用"]]>"在内容中,当该字符串未标记CDATA的结束时部分。
要允许属性值同时包含单引号和双引号,撇号或单引号字符(')可以表示为“'",双引号字符(")为"""。
如果要处理字符数据而不是标记,则只需要转义<和&:
<
&
2.4字符数据和标记
摘自:XML,转义
有五个预定义的实体:
< represents "<"> represents ">"& represents "&"' represents '" represents "
"所有允许的Unicode字符都可以用数字字符引用表示。"例如:
中
大多数控制字符和其他Unicode范围都被特别排除在外,这意味着(我认为)它们不能发生转义或直接:
XML中的有效字符
它取决于上下文。对于内容,它是<<和&,以及]]>(尽管是三个而不是一个字符的字符串)。
对于属性值,它是<<、&、”和'。
对于CDATA,它是]]>。
一个老问题的简单答案…
<强>一直强>(记住90%很重要)
<
&
属性值(记住9%很重要)
attr="
attr='
"
'
注释,CDATA和处理说明(记住0.9%重要)
<!--
-->
--
<![CDATA[
]]>
<?PITarget
?>
Esoterica(0.1%重要要记住)
]]>
接受的答案不正确。最好是使用库来转义xml。
正如在这个其他问题中提到的
"基本上,不允许使用控制字符和Unicode范围以外的字符。这也意味着禁止调用字符实体等。"
如果您只转义五个字符。您可能会遇到找到无效的XML字符(Unicode: 0xc)这样的问题