我需要在 XML 文档中转义哪些字符?

XML 文档中必须转义哪些字符,或者在哪里可以找到这样的列表?

答案

"   "
'   '
<   &lt;
>   &gt;
&   &amp;
<?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>
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
quot  "
amp   &
apos  '
lt    <
gt    >

根据万维网联盟(w3C)的规范, 在 XML 文档中 ,除非用作标记定界符或在注释,处理指令或 CDATA 部分中使用,否则不得以其文字形式出现 5 个字符。 。在所有其他情况下,必须根据下表使用相应的实体或数字引用替换这些字符:

原始字符 XML 实体替换 XML 数字替换
< &lt; &#60;
> &gt; &#62;
“&QUOT;&#34;
&&安培; &#38;
' 者; &#39;

注意,上述实体也可以在 HTML 中使用,除了’。 ,它是随 XHTML 1.0 一起引入的,而未在 HTML 4 中声明。因此,为了确保兼容性, XHTML 规范建议使用&#39;。代替。

< &lt;
 > &gt; (only for compatibility, read below)
 & &amp;
" &quot;
' &apos;

对旧的常见问题的新的简化答案...

简化的 XML 转义(优先级为 100%完成)

  1. 始终 (要记住的 90%重要)

    • 转义< as &lt;除非<正在启动<tag/>
    • 逸出&&amp;除非&正在开始&entity;
  2. 属性值 (9%要记住)

    • attr=" '单引号'是双引号内确定。 "
    • attr=' "双引号"可以放在单引号中。 '
    • 逃脱"作为&quot;'作为&apos;否则。
  3. 注释CDATA处理说明 (记住 0.9%很重要)

    • <!--注释中 -->不必转义,但不能--不允许使用字符串。
    • <![CDATA[CDATA 中 ]]>不必转义,但不允许]]>字符串。
    • <?PITarget PI ?>不必转义,但是不允许?>字符串。
  4. 埃索特里卡 (0.1%重要的记住)

    • 转义]]> as ]]&gt;除非]]>结束 CDATA 节。
      (此规则通常适用于字符数据,即使在 CDATA 部分之外也是如此。)

除了常见的五个字符 [<,>,&,“和'],我还将转义垂直制表符(0x0B),它是有效的 UTF-8,但不是有效的 XML 1.0,甚至很多库(包括 libxml2)会丢失它,并以静默方式输出无效的 XML。

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "
&#20013;

这取决于上下文。对于内容,它是<以及]]> (虽然是三个字符串而不是一个字符)。

对于属性值,它是<'

对于 CDATA,它是]]>

如果要将 < 和&视为字符数据而不是标记,则只需要转义它们:

http://www.w3.org/TR/xml11/#syntax