跳转至

HTML 字符实体参考

HTML 字符引用把源码中的一段 ASCII 文本解析为 Unicode 字符。 现代文档应使用 UTF-8;普通中文和大多数符号无需为了兼容性全部写成实体。

三种形式

形式 示例 说明
命名引用 © 易读,但只有标准定义的名称可用
十进制数字引用 © 直接引用 Unicode 码位的十进制值
十六进制数字引用 © 直接引用 Unicode 码位的十六进制值

建议保留结尾分号,避免与后续字母或数字连在一起产生解析歧义。 “HTML 实体”是常用说法,规范更常使用 character reference(字符引用)。

HTML 语法字符

显示字符 命名引用 数字引用 何时使用
& & & 文本中的与号,避免被解析为引用开头
< &lt; &#60; 文本中的小于号,避免被解析为标签开头
> &gt; &#62; 显示标签或避免歧义时
" &quot; &#34; 双引号属性值内需要显示双引号时
' &apos; &#39; 单引号属性值内需要显示单引号时

&apos; 在 HTML5 中有效;&#39; 也常用于兼容旧处理链。

常用空白与标点

字符 命名引用 数字引用 说明
NBSP &nbsp; &#160; 不换行空格,不用于视觉缩进
© &copy; &#169; 版权
® &reg; &#174; 注册商标
™ &trade; &#8482; 商标
… &hellip; &#8230; 省略号
– &ndash; &#8211; en dash
— &mdash; &#8212; em dash
“ &ldquo; &#8220; 左双弯引号
” &rdquo; &#8221; 右双弯引号

在文本和属性中

<p>条件:3 &lt; 5,名称:A &amp; B。</p>
<a href="/search?q=fish&amp;page=2">下一页</a>
<code>&lt;strong&gt;重点&lt;/strong&gt;</code>

HTML 源码中的属性分隔符 & 写作 &amp;;浏览器解析后的 URL 仍包含普通 &。 属性值应加引号,但加引号不代表其中的不可信数据已经安全。

不能解决的问题

误区 正确认识
实体可以切换文档编码 字符编码由字节、HTTP 头和 <meta charset> 决定
所有非 ASCII 字符都必须实体化 UTF-8 中可直接书写绝大多数文字和符号
HTML 转义适用于任何上下文 JavaScript、CSS、URL 和 HTML 属性有不同规则
先拼接再替换几个字符即可防 XSS 应使用自动上下文编码和安全 DOM API
&nbsp; 可以排版 布局应使用 CSS 的间距、Grid 或 Flexbox

安全边界

  • 普通文本进入 DOM 时优先使用 textContent,不要拼接到 innerHTML。
  • URL 参数使用 URL、URLSearchParams 或可靠序列化器,参见URL 编码。
  • 不可信值进入事件处理器、style 或脚本块时,HTML 实体不能提供完整保护。
  • 数据经过解码、拼接或跨上下文后,应按新的目标上下文重新处理。
  • 实体解码不能代替输入验证、认证、授权、CSP 或 Trusted Types。

检查要点

  • 是否只在必要位置使用字符引用,并统一保留分号?
  • 是否避免双重编码,例如把 &amp; 再变成 &amp;amp;?
  • 是否区分源码文本、DOM 字符值与网络传输字节?
  • 是否把 UTF-8、上下文编码和业务验证分别处理?

相关参考:符号 · ASCII · 质量检查