必须在XML文档中转义哪些字符,或者在哪里可以找到这样的列表?
如果要处理的是字符数据而不是标记,则只需要<和&转义:
http://www.w3.org/TR/xml11/#syntax
标记和属性的转义字符不同 .
对于标签:
< < > > (only for compatibility, read below) & &
对于属性:
" " ' '
http://www.w3.org/TR/2008/REC-xml-20081126/#syntax
&符号(&)和左尖括号(<)不得以其文字形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分 . 如果在其他地方需要它们,则必须分别使用数字字符引用或字符串“&amp;”和“&lt;”进行转义 . 右尖括号(>)可以使用字符串“&gt;”表示,并且为了兼容性,必须使用“&gt;”或字符引用进行转义,当它出现在字符串“]]>”内容中时,当该字符串未标记CDATA部分的结尾时 . 为了允许属性值包含单引号和双引号,撇号或单引号字符(')可以表示为“'”,而双引号字符(“)表示为”“ . ” .
如果您使用适当的类或库,他们将为您进行转义 . 许多XML问题都是由字符串连接引起的 .
只有五个:
" " ' ' < < > > & &
转义字符取决于特殊字符的使用位置 .
示例可以在W3C Markup Validation Service验证 .
安全的方法是在文本中转义所有五个字符,但是,三个字符 " , ' 和 > 不需要在文本中转义:
"
'
>
<?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个特殊字符 must not 都会在评论中转义:
<?xml version="1.0"?> <valid> <!-- "'<>& --> </valid>
所有5个特殊字符 must not 将在CDATA部分中进行转义:
<?xml version="1.0"?> <valid> <![CDATA["'<>&]]> </valid>
在XML处理指令中转义所有5个特殊字符 must not :
<?xml version="1.0"?> <?process <"'&> ?> <valid/>
HTML有its own set of escape codes,它涵盖了更多的字符 .
除了众所周知的五个字符[<,>,&,“,']之外,我还会转义垂直制表符(0x0B) . 它是有效的UTF-8,但不是有效的XML 1.0,甚至还有很多库(包括libxml2)错过它并静默输出无效的XML .
也许这会有所帮助:
List of XML and HTML character entity references:
在SGML,HTML和XML文档中,称为字符数据和属性值的逻辑结构由字符序列组成,其中每个字符可以直接显示(表示自身),或者可以由称为字符引用的一系列字符表示其中有两种类型:数字字符引用和字符实体引用 . 本文列出了在HTML和XML文档中有效的字符实体引用 .
该文章列出了以下五个预定义的XML实体:
quot " amp & apos ' lt < gt >
一个旧的,常见问题的新的,简化的答案......
Always(记住重要的90%)
Escape < as < 除非 < 正在启动<tag/> .
<
<
Escape & as & 除非 & 正在启动&entity; .
&
&
Attribute Values (9%重要记住)
attr=" ' 单引号 ' 在双引号内是可以的 . "
attr="
attr=' " 双引号 " 在单引号内是可以的 . '
attr='
将 " 转义为 " ,将 ' 转换为 ' 否则 .
"
'
Comments, CDATA, and Processing Instructions (重要的是要记住0.9%)
<!-- 在comments --> 内没有必须转义但不允许 -- 字符串 .
<!--
-->
--
<![CDATA[ 在CDATA ]]> 内无需转义任何内容,但不允许使用 ]]> 字符串 .
<![CDATA[
]]>
<?PITarget 在PIs ?> 内没有必须转义,但不允许 ?> 字符串 .
<?PITarget
?>
Esoterica(0.1%重要记住)
Escape ]]> as ]]> 除非 ]]> 正在结束CDATA部分 .(此规则通常适用于字符数据 - 甚至在CDATA部分之外 . )
]]>
来自:http://en.wikipedia.org/wiki/XML#Escaping
有五个预定义的实体:
< represents "<" > represents ">" & represents "&" ' represents ' " represents "
“所有允许的Unicode字符都可以用数字字符引用表示 . ”例如:
中
大多数控制字符和其他unicode范围都被明确排除,这意味着(我认为)它们不会出现转义或直接:
http://en.wikipedia.org/wiki/Valid_characters_in_XML
这取决于具体情况 . 对于内容,它是<和&,和]]>(虽然字符串为3而不是一个char) . 对于属性值,它是<和&和“和” . 对于CDATA,它是]]> .
根据万维网联盟(w3C)的规范,there are 5 characters that must not appear in their literal form in an XML document,除非用作标记分隔符或注释,处理指令或CDATA部分 . 在所有其他情况下,必须根据下表使用相应的实体或数字引用替换这些字符:
原始的CharacterXML实体replacementXML数字替换<&LT; <
&GT;>“&QUOT;”&&放大器;&“者;”
请注意,上述实体也可以在HTML中使用,但 ' 除外,它是随XHTML 1.0引入的,未在HTML 4中声明 . 因此,为了确保复古兼容性,请改为the XHTML specification recommends the use of ' .
9 回答
如果要处理的是字符数据而不是标记,则只需要<和&转义:
http://www.w3.org/TR/xml11/#syntax
标记和属性的转义字符不同 .
对于标签:
对于属性:
http://www.w3.org/TR/2008/REC-xml-20081126/#syntax
如果您使用适当的类或库,他们将为您进行转义 . 许多XML问题都是由字符串连接引起的 .
XML转义字符
只有五个:
转义字符取决于特殊字符的使用位置 .
示例可以在W3C Markup Validation Service验证 .
文字
安全的方法是在文本中转义所有五个字符,但是,三个字符
"
,'
和>
不需要在文本中转义:属性
安全的方法是转义属性中的所有五个字符,但是,
>
字符不需要在属性中转义:如果引号为
"
,则无需在属性中转义'
字符:同样,如果引号是
'
,则"
不需要在属性中进行转义:评论
所有5个特殊字符 must not 都会在评论中转义:
CDATA
所有5个特殊字符 must not 将在CDATA部分中进行转义:
处理说明
在XML处理指令中转义所有5个特殊字符 must not :
XML与HTML
HTML有its own set of escape codes,它涵盖了更多的字符 .
除了众所周知的五个字符[<,>,&,“,']之外,我还会转义垂直制表符(0x0B) . 它是有效的UTF-8,但不是有效的XML 1.0,甚至还有很多库(包括libxml2)错过它并静默输出无效的XML .
也许这会有所帮助:
List of XML and HTML character entity references:
该文章列出了以下五个预定义的XML实体:
一个旧的,常见问题的新的,简化的答案......
简化的XML转义
Always(记住重要的90%)
Escape
<
as<
除非<
正在启动<tag/> .Escape
&
as&
除非&
正在启动&entity; .Attribute Values (9%重要记住)
attr="
'
单引号'
在双引号内是可以的 ."
attr='
"
双引号"
在单引号内是可以的 .'
将
"
转义为"
,将'
转换为'
否则 .Comments, CDATA, and Processing Instructions (重要的是要记住0.9%)
<!--
在comments-->
内没有必须转义但不允许--
字符串 .<![CDATA[
在CDATA]]>
内无需转义任何内容,但不允许使用]]>
字符串 .<?PITarget
在PIs?>
内没有必须转义,但不允许?>
字符串 .Esoterica(0.1%重要记住)
Escape
]]>
as]]>
除非]]>
正在结束CDATA部分 .(此规则通常适用于字符数据 - 甚至在CDATA部分之外 . )
来自:http://en.wikipedia.org/wiki/XML#Escaping
有五个预定义的实体:
“所有允许的Unicode字符都可以用数字字符引用表示 . ”例如:
大多数控制字符和其他unicode范围都被明确排除,这意味着(我认为)它们不会出现转义或直接:
http://en.wikipedia.org/wiki/Valid_characters_in_XML
这取决于具体情况 . 对于内容,它是<和&,和]]>(虽然字符串为3而不是一个char) . 对于属性值,它是<和&和“和” . 对于CDATA,它是]]> .
根据万维网联盟(w3C)的规范,there are 5 characters that must not appear in their literal form in an XML document,除非用作标记分隔符或注释,处理指令或CDATA部分 . 在所有其他情况下,必须根据下表使用相应的实体或数字引用替换这些字符:
原始的CharacterXML实体replacementXML数字替换
<&LT; <
请注意,上述实体也可以在HTML中使用,但 ' 除外,它是随XHTML 1.0引入的,未在HTML 4中声明 . 因此,为了确保复古兼容性,请改为the XHTML specification recommends the use of ' .