首页/开发/正则与编码速查/XML 特殊字符转义规则

XML 特殊字符转义规则

XML 只预定义 &lt;、&gt;、&amp;、&quot;、&apos; 五个实体且必须带分号,实际必须转义的是 & 与 <;转义要先处理 &,禁用字符无法用数字实体绕过,解析外部 XML 还需防 XXE。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌‌​​​​‌‌​‌‌​‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

XML 只有五个预定义实体

XML 预定义实体只有 &lt; &gt; &amp; &quot; &apos; 五个,且必须带分号,任何其它实体都要先有 DTD 定义。特殊字符里必须转义的只有两个:& 和 <,> 仅在避免 ]]> 序列时转义,引号只需在与属性定界符相同时转义。转义顺序也要注意,先处理 & 再处理其它,否则会把刚生成的实体再转义一次。

基本信息

必须转义& 与 <,出现在任何位置都要转义
按需转义> 用于避免 ]]>;引号只在属性值内且与定界符相同
实体语法&name; 必须以分号结束,缺分号是致命错误
数字实体&#38; 与 &#x26; 表示同一个字符,XML 与 HTML 通用
禁用字符XML 1.0 不接受绝大多数 C0 控制字符,连数字实体也无效

典型使用场景

  • 拼装或校验接口请求体,避免因 & 未转义而解析失败
  • 把用户输入写进 XML 配置或模板,防止结构被闭合标签破坏
  • 处理第三方返回的 XML,遇到未定义实体报错时定位来源
  • 在属性值中嵌入 URL,& 必须转义成 &amp;
  • 生成需要内嵌片段的大文本,用 CDATA 减少转义噪音

写法与替代方案

写法与替代方案
<!-- 正确转义:& 与 < 都处理了 -->
<item name="A &amp; B">2 &lt; 3</item>
<!-- 属性里的查询串,& 同样要转义 -->
<link href="https://example.com/a?x=1&amp;y=2"/>
<!-- 大段文本用 CDATA,内部不能再出现 ]]> -->
<script><![CDATA[ if (a < b && c > d) { run(); } ]]></script>
<!-- 避免 ]]> 冲突时的写法:]]&gt; -->

易错点对照

场景错误表现正确做法
只转义 < 和 >& 单独出现导致解析中止先转义 &,再处理其它
属性里写成 &nbsp;报实体未定义错误改用 &#160; 或定义 DTD
把 &amp; 再转一次显示成 &amp;amp; 字面量转义前判断是否已是实体
CDATA 内写 ]]>内容被提前截断拆成两段 CDATA 或转义为 ]]&gt;
注释里写 --注释非法,解析失败删除连续短横线
处理外部 XML 时必须关闭外部实体解析(DTD 与 XInclude 相关能力),否则可能被 XXE 读到本地文件或探测内网;即便只做大小限制,也能削弱实体递归展开造成的资源耗尽攻击。
把 HTML 片段放进 XML 经常失败,因为 HTML 的命名实体表远大于 XML 的五个。出现「实体未定义」时先确认文档类型究竟在按 HTML 还是 XML 解析,必要时统一改用数字实体。

易错点

  • 忘记转义 &:只要内容里有一个裸和的符号,整份文档解析即失败,而报错位置通常指向下一行标签
  • 先转义 < 再转义 &,会把刚生成的 &lt; 变成 &amp;lt;,页面上显示成字面量
  • 把 HTML 命名实体写进 XML,除五个预定义实体外全部报未定义错误
  • 认为控制字符可以用数字实体绕过限制:XML 1.0 中 NUL 等字符即便写成 &#0; 也不合法,只能替换或做编码承载
  • 在注释里放连续短横线或让注释以短横线结尾,这两种写法在 XML 里都是禁止的

数据来源与参考

  • W3C XML 1.0 规范:字符数据、属性值与字符引用
  • W3C XML 1.0 规范:CDATA 段与注释语法
  • OWASP:XML External Entity (XXE) Prevention Cheat Sheet

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/xml-entity-escaping.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌‌​​​​‌‌​‌‌​‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​