Skip to content

免费 HTML 实体解码器 — 解码 HTML

在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。

无追踪 浏览器中运行 免费

你的文本在浏览器本地解码,绝不上传、记录或存储。它只留在本设备上。

0 个字符
已解码 HTML / 文本
0 个字符
已审查实体解码规范的正确性(命名 / 十进制 / 十六进制解析)、星形平面与表情符号重建、宽松的旧式实体解析、渲染解码后不受信任文本的 XSS 风险(及缓解它的重新转义指引)、输入的无网络/无存储隐私性,以及无障碍性(带标签的控件、解码和复制时的实时区域播报)。 — Go Tools 编码团队 · 2026年6月17日

什么是 HTML 实体解码?

HTML 实体解码——也叫 HTML 反转义——是把字符引用转换回它们所代表字符的过程。编码把字面 < 替换成实体 < 以便浏览器把它显示为文本,而解码做的是反操作:它扫描字符串中像 <、&、<、> 或 © 这样的引用,把每个替换成实际字符(<、&、<、>、©)。每当你手里有一段以转义形式存储或传输的标记、需要拿回真实文本时——为了阅读、编辑、交给另一个程序,或弄清楚为什么页面渲染出 &lt; 而非 <——你就会运行这个操作。

弄清这个工具做什么是值得的。它把实体解码成字符;它不重新格式化或校验标记。如果你想拿一段转义字符串并恢复其字面字符,这就是合适的工具。要反过来把字符变成实体,请用 HTML 实体编码器;要缩进并整理一段 HTML,请用 HTML 格式化。编码和解码是精确互逆的,因此一段经编码器再经解码器的字符串会原封不动地返回。

解码器必须理解三种引用,它对三者全部处理。命名引用使用定义好的标签(< 表示 <,© 表示 ©,— 表示 —);十进制数字引用以十进制写出 Unicode 码点(< 表示 <);十六进制数字引用以十六进制写出同一码点(< 表示 <),与 Unicode 标准的 U+XXXX 记法对应。一个健壮的解码器以任意混合接受其中任意一种,因为不同的编码器产出不同的形式。下表展示你最常遇到的引用以及每一个解码成的字符:

| 实体(命名) | 十进制 | 十六进制 | 解码为 | |----------------|---------|-----|------------| | &lt; | &#60; | &#x3C; | < | | &gt; | &#62; | &#x3E; | > | | &amp; | &#38; | &#x26; | & | | &quot; | &#34; | &#x22; | " | | &#x27; | &#39; | &#x27; | ' | | &nbsp; | &#160; | &#xA0; | (不换行空格) | | &copy; | &#169; | &#xA9; | © | | &reg; | &#174; | &#xAE; | ® | | &trade; | &#8482; | &#x2122; | ™ | | &euro; | &#8364; | &#x20AC; | € | | &pound; | &#163; | &#xA3; | £ | | &mdash; | &#8212; | &#x2014; | — | | &ndash; | &#8211; | &#x2013; | – | | &hellip; | &#8230; | &#x2026; | … | | &#x1F600; | &#128512; | &#x1F600; | 😀 |

有两种行为让一个周密的解码器与众不同。第一,它从数字引用重建星形平面字符——U+FFFF 以上的任何字符,包括大多数表情符号——而非产生损坏的半字符;😀 会正确变成 😀。第二,它遵循浏览器对那一小组历史上不带结尾分号出现的旧式命名实体的宽松解析,因此 &copy 2026 仍解码为 © 2026,即便严格的 XML 会拒绝它。本工具两者都做,与广泛使用的 he 库的行为一致,因此其输出与真实浏览器渲染的结果一致。

每个解码器都该附带一句警告:解码后的文本按定义是未转义的。解码是保护页面免受跨站脚本攻击的转义的逆操作,因此一段含有 <script> 标签或事件处理器的解码字符串又一次成了活的、危险的标记。绝不要把不受信任的输入解码后用 innerHTML 插入页面——那会重新打开编码本应封堵的那个漏洞。当你需要原始字符用于阅读、编辑或存储时解码;如果结果将被渲染回 HTML,请先在其目标上下文中重新转义。又因为每个字节都在你的浏览器中处理,你解码的转义字符串——哪怕是一条私有记录或一份未发布草稿——永不跨越网络。对于相邻的转换,URL 编码器 / 解码器 处理百分号编码,Base64 编码 / 解码 处理二进制安全传输。

// Decoding is the inverse of escaping. The classic round-trip:
//   &lt;  →  <     &gt;  →  >     &amp;  →  &     &quot;  →  "     &#x27;  →  '

// Browser — the safest decoder is the platform itself. Use textarea, NOT innerHTML on a live node,
// so the decoded markup is never executed.
function decodeHtml(str) {
  const ta = document.createElement('textarea');
  ta.innerHTML = str;        // the parser resolves entities into text
  return ta.value;           // .value is plain text — no script runs
}

decodeHtml('&lt;div&gt; &amp; &copy;');   // → '<div> & ©'
decodeHtml('&#60;&#x3E;');                // → '<>'
decodeHtml('&#x1F600;');                 // → '😀'
decodeHtml('&copy 2026');                // → '© 2026'  (lenient, no semicolon)

// ---------------------------------------------------------------
// SECURITY: decoded text is unescaped. Never do this with untrusted input:
//   el.innerHTML = decodeHtml(userInput);   // ❌ reopens the XSS hole
// If the decoded value must be displayed, re-escape it in its destination context first,
// or assign it as text:
//   el.textContent = decodeHtml(userInput); // ✅ shown as literal text

// ---------------------------------------------------------------
// Node.js (no DOM) — use a tested library such as he:
//   import { decode } from 'he';
//   decode('&lt;div&gt; &amp; &copy;');     // → '<div> & ©'

核心功能

解码命名、十进制和十六进制引用

以任意组合解析完整的 HTML5 命名实体集(<、©、—)、十进制数字引用(<)和十六进制引用(<),完全像浏览器那样——因此无论编码器产出了什么,它都能逆转。

处理表情符号和星形平面字符

U+FFFF 以上的数字引用会被重建为其完整码点,因此 😀 解码为 😀 而非损坏的代理。罕见的 CJK 表意文字和数学符号也能忠实解码。

宽松的旧式实体解析

遵循浏览器对缺少结尾分号的命名实体的向后兼容规则,因此像 &copy 2026 这样的旧式或草率标记仍解码为 © 2026,而严格解析器会让它损坏。

实时即时解码

输出随你键入更新——没有提交按钮,没有往返延迟。粘贴一大段转义块,恢复出的文本立即出现,随时可复制。

内置实体速查

一张把最常用实体——保留的五个加上 ©、®、™、€、—、  等等——映射到其字符的参考表就在页面上,因此你永远不必去别处查实体。

一键切换到编码器

「切换方向」直接跳转到 HTML 实体编码器以反向操作。编码与解码是精确互逆的,因此你可以让文本无损往返。

100% 私密,仅在浏览器

所有解码都在你的设备上用 JavaScript 完成——无网络请求、无日志、无存储,可在 DevTools → Network 中验证。私有数据库片段、邮件内容和未发布草稿永不离开标签页。

支持 15 种语言

完整界面——标签、说明和指引——已本地化为 15 种语言,因此无论你的团队在哪里工作,工具及其安全建议都清晰明了。

实例演示

解码一组命名实体

&lt;div&gt; &amp; &copy;
<div> & ©

解码器把每个命名引用解析为它所代表的字符:< 变成 <,> 变成 >,& 变成 &,© 变成版权符号 ©。这是日常情形——把一段以转义形式存储或传输的字符串变回真实字符,以便你阅读、编辑或重新处理这段标记。解码是编码的精确逆操作,因此一段经编码器再变回来的字符串会原封不动地返回。

解码十进制和十六进制数字引用

&#60;&#x3E;
<>

数字字符引用在两种进制下都有效:< 是码点 60 的十进制形式,即 <;> 是码点 62 的十六进制形式,即 >。解码器可互换处理十进制(&#NNN;)和十六进制(&#xHHH;)引用,把每一个都解析为其 Unicode 字符。这很重要,因为各个编码器在该输出哪种形式上各执一词——有的偏好十进制,有的偏好十六进制——而一个健壮的解码器必须两者都接受。

解码一个缺少分号的旧式实体

&copy 2026
© 2026

旧版 HTML 允许一小组命名实体不带结尾分号出现,浏览器为了向后兼容仍会解析它们——&copy 2026 渲染为 © 2026。本解码器遵循同样宽松的解析规则,因此它能从严格解析器会原样保留的草率或旧式标记中恢复出预期字符。如果你在调试一段显示出零散 &copy 的文本,原因就在于此。

从十六进制引用解码一个表情符号

&#x1F600;
😀

数字引用不限于基本多文种平面——😀 是码点 U+1F600(咧嘴笑表情 😀)的十六进制引用。解码器能从数字引用正确重建星形平面字符(U+FFFF 以上的任何字符),因此表情符号、罕见的 CJK 表意文字和数学符号都能忠实解码,而不会变成损坏的代理对或替换字形。

解码一段转义后的属性字符串

&lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;
<a href="x">Tom & Jerry's</a>

这是编码器旗舰示例的一次完整往返。" 解析为双引号,'(兼容安全的数字撇号)解析为 ',尖括号和与号实体解析为它们的字面字符,精确重建出原始的 Tom & Jerry's。由于解码器以任意组合接受命名、十进制和十六进制引用,无论编码器使用了哪种实体风格,它都能逆转编码器的产物。

如何使用 HTML 实体解码器

  1. 1

    粘贴转义后的字符串

    把充满 HTML 实体的文本放入输入框。解码后的字符会随你键入实时更新——没有提交按钮,也不会把任何内容发送到任何地方。

  2. 2

    读取解码结果

    命名、十进制和十六进制引用都会自动解析为它们所代表的字符,包括表情符号和其他星形平面码点。无需选择格式——解码器会检测每个引用的类型。

  3. 3

    复制解码后的文本

    点击「复制」把恢复出的字符放入剪贴板,随时可粘贴到编辑器、数据库或另一个工具中。「清空」会重置两个面板以处理下一个字符串。

  4. 4

    重新显示不受信任的文本前先重新转义

    如果解码后的输出将被渲染回网页,且其中任何内容来自不受信任的来源,请先用编码器再次转义它,以避免重新打开 XSS 漏洞。

  5. 5

    需要编码?切换方向

    当你想把原始字符变成实体时,使用「切换方向」切换到 HTML 实体编码器。

常见 HTML 解码错误

用 innerHTML 渲染了解码后的不受信任输入

解码会反转义文本,因此一个解码后的 <script> 标签又是活的标记。通过 innerHTML 插入它会执行它——一个教科书式的 XSS 漏洞。重新转义解码后的不受信任文本,或使用 textContent。

✗ 错误
el.innerHTML = decode(userInput)  →  script runs (XSS)
✓ 正确
el.textContent = decode(userInput)  →  shown as text

文本被二次编码却只解码了一次

二次编码的文本需要两遍解码。把 &lt; 解码一次得到 <,而非 <。再解码一次——并修复管道,让它一开始就绝不二次编码。

✗ 错误
&amp;lt;  decoded once  →  &lt;  (still an entity)
✓ 正确
&amp;lt;  decoded twice  →  <

把 HTML 解码与 URL 或 Base64 解码搞混

实体、百分号编码和 base64 是不同的方案。HTML 解码器不会把 %20 变成空格,也不会解码一个 base64 数据块。为每个编码层使用匹配的工具。

✗ 错误
HTML-decode "%3Cdiv%3E"  →  unchanged, still percent-encoded
✓ 正确
URL-decode "%3Cdiv%3E"  →  <div>

用了一个会漏掉数字或星形引用的正则

一个手写的、只针对命名实体的正则会悄悄跳过 <、> 和像 😀 这样的表情符号,把它们留在输出里。请使用浏览器解析器或一个覆盖所有引用形式、经过测试的库。

✗ 错误
regex for &name; only  →  &#x1F600; left undecoded
✓ 正确
full decoder  →  &#x1F600; becomes 😀

解码后输出显示为乱码

解码 é 会得到真实的 é,但如果接收的页面或文件不是以 UTF-8 提供,该字符会损坏成乱码。在写出解码文本之前,把字符集设为 UTF-8。

✗ 错误
decoded é into a Latin-1 file  →  é mojibake
✓ 正确
decoded é into a UTF-8 file  →  é

假定严格解析而漏掉了旧式实体

严格的 XML 解析器会忽略像 &copy 这样的无分号实体,把它们留为字面。浏览器会解析它们,因此一个忠实的解码器也必须如此——否则你的输出会与用户所见不一致。

✗ 错误
strict parse of "&copy 2026"  →  &copy 2026 literal
✓ 正确
lenient parse of "&copy 2026"  →  © 2026

谁在使用本工具

阅读以转义形式存储的标记
从数据库、日志或 JSON 字段里取出了一段被保存为 <div>… 的 HTML 片段?解码它,去看到并编辑真实标记,而不是对着一墙实体眯眼。
调试二次编码的文本
在本该是 < 的活页面上看到 &lt;?把它粘到这里确认它被二次编码了,解码两次以恢复原文,并把重复转义追溯回你管道里的源头。
从 HTML 片段提取纯文本
需要从转义后的邮件正文或 CMS 字段里取出人类可读的文本?在你索引、搜索或在别处显示内容之前,解码实体以恢复实际字符。
从抓取或导出的数据中恢复字符
导出和抓取常常交付带有完整实体的内容。把 &、é 之类变回它们的字符,让数据在进入你自己的系统之前干净整洁。
验证编码器的输出能否往返
用编码器转义一段字符串后,在这里解码它,确认你能原样拿回原文。一次干净的往返证明你的转义是正确且可逆的。
解开一个神秘实体
卡在 ™ 或 … 究竟是什么上?把它粘进来读出解码后的字符,或查阅内置速查表——无需记忆实体表。
安全地解码旧式标记
在处理不一致地使用像 &copy 或 &nbsp 这种无分号实体的旧 HTML?宽松解码器会像真实浏览器那样恢复出预期字符,因此你的清理与用户实际看到的一致。

解码器如何工作

解析全部三种引用形式
解码器将命名引用与完整的 HTML5 命名字符表匹配,把十进制引用(&#NNN;)解析为以 10 为底的码点,把十六进制引用(&#xHHH;)解析为以 16 为底的码点。每个都解析为其 Unicode 字符;三种形式在输入上可以互换。
星形平面重建
码点超过 U+FFFF 的数字引用——大多数表情符号和许多符号——会被转换为正确的代理对,因此字符渲染为单个字形。😀 变成 😀,而非两个损坏的半字符。
宽松的旧式实体处理
一组定义好的命名实体在历史上不带结尾分号出现,浏览器仍会解析它们。解码器镜像了这一行为——&copy 2026 产出 © 2026——与真实浏览器的渲染一致,而非严格的 XML 解析器。
对纯文本幂等
不属于已识别引用的字符,包括输入中已有的原始非 ASCII 文本,都原样通过。解码一段没有实体的字符串会原样返回它,因此这个操作可以安全地在混合内容上运行。
解码后的输出是未转义的
解码是 XSS 保护性转义的逆操作,所以结果又成了活的标记。工具会把这一点显露出来,以便你不会把不受信任的解码文本用 innerHTML 插入页面——在渲染前先在其目标上下文中重新转义它。
浏览器本地,零网络
解码在主线程上以 JavaScript 同步运行;没有 API 调用、没有服务器往返、没有持久化。输入永不离开页面,你可以在键入时观察空空的 Network 面板来确认。

HTML 反转义最佳实践

绝不直接渲染解码后的不受信任文本
解码后的输出是未转义的标记。如果其中任何内容来自用户或外部来源,请在把它插入页面前重新转义,或通过 textContent 而非 innerHTML 赋值。跳过这一步会重新打开转义本应封堵的跨站脚本漏洞。
按编码的相反顺序解码
一个值可能先被 HTML 编码,再 URL 编码,再 Base64 编码。按它们被应用的相反顺序撤销这些层——并为每一层使用匹配的工具:实体用本工具,百分号编码用 URL 解码器,base64 用 Base64 工具。
解码一次,不要反射式地解
如果一次解码后仍留有像 < 这样可见的实体,说明输入被二次编码了——再解码一次以恢复原文,然后修复上游管道,让文本精确转义一次。不要盲目循环;要弄清那多出来的一层为何存在。
以 UTF-8 提供结果
解码数字引用会产生真实的 Unicode 字符——重音、符号、表情符号。请确保接收解码文本的页面、文件或字段是 UTF-8,否则那些恢复出的字符会显示为乱码。
在应用代码中优先使用经过测试的库
对于一次性转换,本工具很理想;在生产环境中,请用经过充分测试的库解码(Node 中用 he,浏览器自身的解析器通过游离的 textarea),而非手写正则,后者常常漏掉数字引用、星形字符和旧式实体。

常见问题

我解码文本时,文本会被发送到你们的服务器吗?
不会。每个实体都完全在你的浏览器中用 JavaScript 解析——打开 DevTools → Network,你会看到输入或粘贴时没有任何请求发出。什么都不会上传、不会记录、不会写入磁盘。这种隐私很重要,因为人们要解码的转义字符串往往是敏感的:从私有数据库取出的片段、内部邮件、客户记录,或从一个你不想泄露的应用里复制出的标记。在服务器端解码器上,这些都会跨网络传到你无法掌控的机器上;而在这里,文本永远不会离开标签页。这正是要在客户端解码 HTML、而非粘贴到一个原则上可能保留所有处理内容副本的网站的全部理由。
解码或反转义 HTML 是什么意思?
解码 HTML——也叫反转义——是 HTML 转义的逆操作:它把像 <、&、< 或 © 这样的字符引用各自转换回它所代表的真实字符(<、&、<、©)。每当你手里有一段以转义形式存储或传输的字符串、需要拿回字面文本时,你就会用到它——为了阅读、编辑、喂给另一个程序,或调试为什么页面在屏幕上显示 &lt; 而非 <。如果你想反过来把字符变成实体,请使用配套的 HTML 实体编码器;两者是精确互逆的。
这个解码器能处理哪些类型的实体?
三种形式都能,以任意混合方式。它解析命名引用(<、&、©、— 以及完整的 HTML5 命名实体集)、十进制数字引用(<、é)和十六进制数字引用(<、é)。它还能从数字引用重建 U+FFFF 以上的星形平面字符,因此像 😀 这样的表情符号会正确解码为 😀。它也遵循浏览器对少数省略结尾分号的旧式命名实体的宽松解析——&copy 2026 仍解码为 © 2026——而严格解析器会跳过它们。简而言之,无论编码器产出了什么,本解码器都能逆转。
为什么我的文本显示 &lt; 而不是 <?
这是二次编码的典型症状。在你管道的某个环节,文本被转义了两次:第一遍把 < 变成 <,第二遍把 < 里的 & 变成 &,得到 &lt;。当浏览器对它解码一次时,它把 < 显示为字面文本而非 <。要恢复原文,解码两次——把字符串粘到这里得到 <,再把结果粘回去得到 <。真正的修复在上游:在输出时精确转义一次,让文本从一开始就不会被二次编码。
解码后的输出可以安全地放回页面吗?
这里要小心。解码是转义的反操作,所以解码后的文本按定义就是未转义的——如果它包含 <script> 标签或 onerror 处理器,那段标记现在又活过来了。绝不要把不受信任的输入解码后用 innerHTML 插入页面,否则你会重新引入转义本应封堵的那个跨站脚本(XSS)漏洞。当你需要原始字符用于阅读、编辑或存储时,解码是正确之举;但任何要渲染回 HTML 的内容都必须在其目标上下文中重新转义。如果你即将显示解码结果,请先用 HTML 实体编码器 再次处理它。
解码能正确处理非 ASCII 字符和表情符号吗?
能。数字引用可以编码任意 Unicode 码点,解码器全都能解析——重音字母(é → é)、符号(€ → €)、长破折号(— → —)和完整平面的表情符号(😀 → 😀)。对于 U+FFFF 以上的星形字符,它会重建完整码点,而非产生损坏的半字符。输入中已有的原始非 ASCII 字符会原样通过,因此一段混合真实 UTF-8 与实体的字符串能干净解码而不破坏任何一部分。请确保你把结果粘入的页面或文件以 UTF-8 提供,这样恢复出的字符才能正确显示。
如何把文本编码回实体?
使用配套的 HTML 实体编码器。它接收像 <div> & © 这样的原始字符,把它们转义为 <div> & ©,并提供命名、十进制或十六进制输出选项,以及面向旧字符集的「编码所有非 ASCII」模式。对保留字符而言,编码和解码是精确互逆的,因此你可以让文本在两个工具间往返而不丢失内容。你可以用本页的「切换方向」按钮直接跳过去。
这和 URL 解码或 Base64 解码是一回事吗?
不是——它们是面向三种不同任务的三种不同编码,把它们搞混是常见的 bug 来源。HTML 实体解码把 < 变回 <。URL(百分号)解码把 %20 变回空格,用于查询字符串和路径——为此请使用 URL 编码器 / 解码器。Base64 解码把一个 base64 字符串变回原始字节,用于二进制安全传输——请使用 Base64 编码 / 解码。一个值可能被多层包裹,因此请按它们被应用的相反顺序解码。本工具只处理 HTML 实体。