【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
XML文档中必须转义哪些字符,或者在哪里可以找到这样的列表?
#1楼
除了常见的五个字符[<,>,&,“,'],我还将转义垂直制表符(0x0B)。它是有效的UTF-8,但不是有效的XML 1.0,甚至许多库(包括libxml2)错过它,并以静默方式输出无效的XML。
#2楼
如果您使用适当的类或库,它们将为您进行转义。 许多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='"'/>
评论
所有5个特殊字符均不得在注释中转义:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
数据
所有5个特殊字符都不得在CDATA部分中转义:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
加工说明
XML处理指令中不得转义所有5个特殊字符:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
XML与HTML
HTML有其自己的转义码集,可覆盖更多字符。
#3楼
也许这会有所帮助:
在SGML,HTML和XML文档中,称为字符数据和属性值的逻辑结构由字符序列组成,其中每个字符都可以直接表示(代表自己),也可以由一系列称为字符引用的字符表示,其中有两种类型:数字字符引用和字符实体引用。 本文列出了在HTML和XML文档中有效的字符实体引用。
该文章列出了以下五个预定义的XML实体:
quot "
amp &
apos '
lt <
gt >
#4楼
根据万维网联盟(w3C) 的规范 ,除了用作标记定界符或用作注释定界符或在注释,处理指令或CDATA部分中使用之外, XML文档中不得有5个字符以其原义形式出现。 。 在所有其他情况下,必须根据下表使用相应的实体或数字引用来替换这些字符:
原始字符 XML实体替换 XML数字替换
< &lt; &#60;
> &gt; &#62;
“&QUOT;&#34;
&&安培; &#38;
' 者; &#39;
注意,上述实体也可以在HTML中使用,除了’。 ,它是随XHTML 1.0引入的,而未在HTML 4中声明。因此,为确保追溯兼容性, XHTML规范建议使用&#39;。 代替。
#5楼
标签和属性的转义字符不同。
对于标签:
< <
> > (only for compatibility, read below)
& &
对于属性:
" "
' '
http://www.w3.org/TR/2008/REC-xml-20081126/#syntax
除用于标记分隔符时,或在注释,处理指令或CDATA节中,“&”字符(&)和左尖括号(<)均不得以其文字形式出现。 如果在其他地方需要它们,则必须分别使用数字字符引用或字符串“&amp;”和“&lt;”对其进行转义。 右尖括号(>)可以用字符串“&gt;”表示,并且为了兼容起见,在内容中出现在字符串“]]>”中时,必须使用“&gt;”或字符引用对其进行转义,当该字符串未标记CDATA节的结尾时。
为了允许属性值同时包含单引号和双引号,撇号或单引号字符(')可以表示为“’”,而双引号字符(”)可以表示为“’”。 ”。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3143557