HTML 实体编码完全指南:所有特殊字符对照 + XSS 防御

想在网页上显示 < 这个符号,直接写 < 浏览器会以为你在开标签——必须写成 &lt; 才能原样显示。这就是 HTML 实体编码。

✍️ 作者:DevToolbox 技术团队📅 更新于:2026-06-24📎 引用:WHATWG HTML 实体规范
MDN: HTML 字符实体WHATWG HTML 实体规范
MDN: HTML 字符实体

📌 本文关键结论(TL;DR)

  • HTML 实体编码完全指南:所有特殊字符对照 + XSS 防 是开发者常用的解决方案之一
  • 本文基于 RFC 标准实战经验编写
  • 提供免费在线工具,浏览器本地处理,数据不上传
  • 文末有 FAQ 区块解答常见疑问,可直接复制使用
✍️ 作者:DevToolbox 技术团队📅 更新于:2026-06-24

📌 本文关键结论(TL;DR)

  • HTML 实体编码完全指南:所有特殊字符对照 + XSS 防 是开发者常用的解决方案之一
  • 本文基于 RFC 标准实战经验编写
  • 提供免费在线工具,浏览器本地处理,数据不上传
  • 文末有 FAQ 区块解答常见疑问,可直接复制使用

HTML 实体编码是前端开发必学的基础,也是防止 XSS 攻击的第一道防线。本文讲清命名实体 vs 数字实体的区别、常用字符对照表、以及 3 个真实 XSS 漏洞场景。文末推荐 DevToolbox HTML 实体参考表——支持搜索 + 复制。

一、HTML 实体的 3 种写法

HTML 实体都以 & 开头、以 ; 结尾,中间有 3 种形式:

  • 命名实体(Named):&lt; → 小于号(less than)
  • 十进制数字(Decimal):&#60; → 同样是小于号
  • 十六进制数字(Hex):&#x3C; → 同样是小于号

三种写法浏览器都识别。命名实体好记,数字实体覆盖全(任何 Unicode 字符都能编码)。

二、必背的 15 个常用实体

前 4 个是 HTML 语法保留字符,必须转义。其余是排版符号:

字符 命名实体 十进制 何时用
<&lt;&#60;显示 < 符号
>&gt;&#62;显示 > 符号
&&amp;&#38;显示 & 符号
"&quot;&#34;属性值内用
'&apos;&#39;属性值内用
非断行空格&nbsp;&#160;防止空格被折叠
©&copy;&#169;版权符号 ©
®&reg;&#174;注册商标 ®
&trade;&#8482;商标 ™
×&times;&#215;乘号 ×
÷&divide;&#247;除号 ÷
&para;&#182;段落符号 ¶
&euro;&#8364;欧元 €
¥&yen;&#165;日元 ¥
&mdash;&#8212;长破折号 —

三、3 个真实 XSS 漏洞场景

场景 1:用户输入直接插入 HTML

// ❌ 危险:用户输入直接拼接
element.innerHTML = userInput;

// ✅ 安全:textContent 自动转义
element.textContent = userInput;

场景 2:URL 参数未过滤

// ❌ 危险:URL 参数直接拼 HTML
const name = new URLSearchParams(location.search).get('name');
document.write(`<h1>Welcome ${name}</h1>`);

// ✅ 安全:用 DOMPurify 或服务端转义
const safe = DOMPurify.sanitize(name);
document.write(`<h1>Welcome ${safe}</h1>`);

场景 3:模板引擎自动转义失效

Vue/React 默认自动转义用户输入,但 v-html / dangerouslySetInnerHTML跳过转义。只在 100% 信任内容时使用,外部输入必须先过 DOMPurify

四、为什么用 &nbsp; 而不是空格

HTML 默认会合并连续空白——3 个空格显示成 1 个。想保留原始间距或对齐,用 &nbsp;(non-breaking space)。常用于:

  • 段首缩进(2 个 &nbsp;
  • 价格数字对齐(¥99&nbsp;元
  • 防止标点被换行拆分

五、结语

HTML 实体是前端"基本功中的基本功"。背下前 4 个保留字符(&lt; &gt; &amp; &quot;)就能解决 90% 的场景;遇到 XSS 记住铁律——任何用户输入都要转义或过滤

查表或复制实体?DevToolbox HTML 实体参考 收录 200+ 常用字符,支持搜索和点击复制。

相关工具:HTML 实体参考 · URL 编解码 · 正则表达式测试

八、常见问题 FAQ

Q: HTML 实体是什么?

HTML 实体(HTML entities)是用特定代码表示 HTML 保留字符的方法。`<` 表示 `<`,`&` 表示 `&`,`©` 表示 ©。

Q: 什么时候需要 HTML 实体?

在 HTML 内容中显示 < > & 等保留字符时必须用实体。JavaScript 字符串、URL 参数、属性值都需要正确编码。

Q: HTML 实体和 Unicode 有什么区别?

HTML 实体是 HTML 专用编码方式(如 `©` = ©),Unicode 是字符集标准(U+00A9 = ©)。HTML 实体可以引用 Unicode 字符。

🧰
添加到主屏幕
离线也能用,秒开不等待