我需要在XML文档中转义哪些字符?
哪些字符必须在XML文档中转义,或者我可以在哪里find这样的列表?
如果你使用适当的class级或图书馆,他们会为你逃避。 许多XML问题是由string连接引起的。
XML转义字符
只有五个:
" " ' ' < < > > & &
转义字符取决于特殊字符的使用位置。
这些示例可以在W3C标记validation服务进行validation。
文本
安全的方法是逃避文本中的所有五个字符,然而,三个字符" , '和>不需要在文本中转义:
<?xml version="1.0"?> <valid>"'></valid>
属性
安全的方法是在属性中转义所有五个字符,然而, >字符不需要在属性中转义:
<?xml version="1.0"?> <valid attribute=">"/>
如果引号是"字符不需要在属性中转义" :
<?xml version="1.0"?> <valid attribute="'"/>
同样,如果引号是"不需要在属性中转义' :
<?xml version="1.0"?> <valid attribute='"'/>
注释
所有5个特殊字符不得在注释中转义:
<?xml version="1.0"?> <valid> <!-- "'<>& --> </valid>
CDATA
所有5个特殊字符不得在CDATA部分中转义:
<?xml version="1.0"?> <valid> <![CDATA["'<>&]]> </valid>
处理说明
XML处理指令中的所有5个特殊字符不得转义:
<?xml version="1.0"?> <?process <"'&> ?> <valid/>
XML与HTML
HTML有自己的一套转义代码 ,涵盖了更多的字符。
也许这将有助于:
XML和HTML字符实体引用列表 :
在SGML,HTML和XML文档中,称为字符数据和属性值的逻辑结构由字符序列组成,其中每个字符可以直接表示(表示自己),或者可以由称为字符引用的一系列字符表示,其中有两种types:数字字符引用和字符实体引用。 本文列出了在HTML和XML文档中有效的字符实体引用。
该文章列出了以下五个预定义的XML实体:
quot " amp & apos ' lt < gt >
根据万维网联盟(W3C)的规范, 在XML文档中有5个字符不得以文字forms出现 ,除非用作标记分隔符或注释,处理指令或CDATA部分。 在所有其他情况下,必须使用相应的实体或数字引用来replace这些字符,如下表所示:
原始字符 XML实体replace XML数字replace
< &lt; &#60;
> &gt; &#62;
“ &quot; &#34;
&&amp; &#38;
' ' &#39;
注意,上述实体也可以用于HTML,除了' ,这是用XHTML 1.0引入的,并没有在HTML 4中声明。为此,为了确保兼容性, XHTML规范build议使用&#39; 代替。
转义字符对于标签和属性是不同的。
对于标签:
< < > > (only for compatibility, read below) & &
对于属性:
" " ' '
http://www.w3.org/TR/2008/REC-xml-20081126/#syntax
除非用作标记分隔符,注释,处理指令或CDATA部分,否则符号字符(&)和左尖括号(<)不得以文字forms出现。 如果在别处需要它们,则必须分别使用数字字符引用或string“&amp;”和“&lt;”来转义它们。 右括号(>)可以使用string“&gt;”来表示,为了兼容性,在出现在内容中的string“]]>”时,必须使用“&gt;”或字符引用来转义,当该string不标记CDATA节的结尾时。
为了允许属性值包含单引号和双引号,撇号或单引号字符(')可以表示为“'”,而双引号字符(“)as” ”。
除了通常已知的五个字符[<,>,&,“,'],我也会转义垂直制表符(0x0B)。它是有效的UTF-8,但不是有效的XML 1.0,甚至包括许多库libxml2)错过了它,并静静地输出无效的XML。
摘自: http : //en.wikipedia.org/wiki/XML#Escaping
有五个预定义的实体:
< represents "<" > represents ">" & represents "&" ' represents ' " represents "
“所有允许的Unicode字符都可以用数字字符引用来表示”。例如:
中
大多数控制字符和其他unicode范围被明确排除,这意味着(我认为)他们不能发生逃脱或直接:
这取决于上下文。 对于内容,它是<和&,和]]>(尽pipe是3而不是一个字符的string)。 对于属性值,它是<和&和“和”。对于CDATA,它是]]>。
新的,简单的回答一个老的,常见问题…
简化的XML转义
-
总是 (要记住90%重要)
- 转义
<as<除非<正在启动<tag/>。 - 逃离
&as&除非&开始&entity;。
- 转义
-
属性值 (9%重要记住)
-
attr="'单引号'在双引号内是可以的。" -
attr='"双引号"在单引号内是可以的。' - 如
"逃逸"和'如同'一样。
-
-
评论 , CDATA和处理说明 (1%要记住)
-
<!--在评论-->没有什么必须逃脱,但没有string是允许的。 -
<![CDATA[CDATA]]>不需要转义,但是不允许]]>string。 -
<?PITarget在PI中?>什么都不必转义,但不允许?>string。
-
如果要处理字符数据而不是标记,则只有<和&被要求转义:
这些需要逃避:
" " ' ' < < > > & &