Skip to content

免费 HTML 实体编码器 — 转义 HTML

在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。

无追踪 浏览器中运行 免费

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

选项 · 格式与编码选项
实体格式
0 个字符
已编码 HTML
0 个字符
已审查实体编码规范的正确性(命名 / 十进制 / 十六进制)、在 HTML 和属性上下文中对全部五个特殊字符的 XSS 安全转义、兼容安全的 ' 撇号约定、输入的无网络/无存储隐私性,以及无障碍性(带标签的控件、编码和复制时的实时区域播报)。 — Go Tools 编码团队 · 2026年6月17日

什么是 HTML 实体编码?

HTML 实体编码——也叫 HTML 转义——是把在 HTML 中具有特殊含义的字符替换成一种称为实体的安全文本表示的过程,从而让浏览器把它们显示为字面文本,而不是解释为标记。最重要的五个字符正是 HTML 用来构造文档的那些:开闭标签的尖括号 < 和 >、开启实体的与号 &,以及界定属性值的引号 " 和 '。当其中任何一个出现在应被展示而非执行的内容里时,就必须转义,否则浏览器会误读页面——轻则文本渲染错误,重则攻击者塞进一个 <script> 标签。

弄清这个工具做什么是有帮助的。它把文本编码成实体;它不组装或美化文档。如果你想把一串代码作为纯文本读到页面上,或在把用户提供的输入插入 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; | | é | &eacute; | &#233; | &#xE9; |

请注意撇号写作 '(或 ')而非 ':命名的 ' 直到 HTML5 和 XML 才被标准化,在旧的 HTML4 解析器中不安全,因此数字形式——处处都能识别——才是兼容之选。本工具遵循与广泛使用的 he 库相同的约定,这就是 ' 的默认输出是 ' 的原因。

区分字符集与实体值得记住,因为它解释了「编码所有非 ASCII」选项。字符集(如 UTF-8)决定字符如何作为字节存储;实体则是一种仅用纯 ASCII 字符 & # ; 以及字母或数字书写字符的方式。在现代 UTF-8 页面上,é、— 和 😀 是有效的原始字符,根本不需要任何实体——这正是默认模式不去碰它们的原因。只有当文本必须经过无法处理原始 UTF-8 的系统时,你才强制把它们转为实体,此时每个非 ASCII 码点都被重写为 ASCII 安全的数字或命名引用。又因为这一切都在你的浏览器中运行,你转义的标记——哪怕是私有模板或未发布草稿——永不跨越网络。对于相关转换,JSON 转义Base64 编码 / 解码 工具分别处理 JavaScript 字符串的转义和二进制安全传输。

// Server-side templates auto-escape, but when you build HTML by hand you must escape yourself.
// The five reserved characters and their safe entities:
//   <  →  &lt;     >  →  &gt;     &  →  &amp;     "  →  &quot;     '  →  &#x27;

// Node.js — escape untrusted input before inserting it into HTML element content.
function escapeHtml(str) {
  return str
    .replace(/&/g, '&amp;')   // & first, so later entities are not double-escaped
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#x27;'); // numeric form — safe in HTML4, HTML5 and XML
}

const userInput = `<a href="x">Tom & Jerry's</a>`;
const safe = escapeHtml(userInput);
// → &lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;
document.getElementById('out').innerHTML = `<p>${safe}</p>`; // renders as literal text

// ---------------------------------------------------------------
// In practice, prefer the platform's built-in escaping where it exists:
//   - React / Vue / Angular escape interpolated text by default
//   - Use textContent instead of innerHTML when you only need text:
//       el.textContent = userInput;  // the browser escapes for you
//   - Server frameworks (Jinja, ERB, Blade) auto-escape unless you opt out

核心功能

正确转义五个保留字符

< > & " ' 会被转换成它们的安全实体,与一个加固过的 XSS 防护库的做法完全一致——包括为撇号使用兼容安全的 ',而非 HTML4 不安全的 '。这正是在 HTML 元素和属性上下文中中和不受信任输入的精确字符集合。

命名、十进制和十六进制输出

把相同的字符获取为可读的命名实体(<、©)、十进制数字引用(<)或十六进制引用(<)。选择你消费系统期望的形式;三者解析后都解析为完全相同的字符。

可选的「编码所有非 ASCII」模式

默认只转义保留字符,让重音和表情符号保持为可读的原始 UTF-8。勾选一个复选框即可把每个高于 0x7F 的码点转换成 ASCII 安全的实体,以适配旧字符集或会破坏 UTF-8 的系统。

实时即时编码

输出随你键入更新——没有提交按钮,没有往返延迟。粘贴一大段标记,转义结果立即出现,随时可复制。

内置实体速查

一张最常用实体的参考表——保留的五个加上 ©、®、™、€、—、  等等——以命名、十进制和十六进制形式就在页面上,因此你永远不必去别处查实体。

一键切换到解码器

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

100% 私密,仅在浏览器

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

支持 15 种语言

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

实例演示

转义一段 HTML 片段(默认的「特殊字符」模式)

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

在默认的「特殊字符」模式下,编码器只重写在 HTML 标记中具有特殊含义的五个字符:< 变成 <,> 变成 >,& 变成 &," 变成 ",' 变成 '。撇号采用数字形式 ' 而非命名实体 ',因为 ' 未在 HTML4 中定义,旧解析器可能无法识别,而十六进制形式则被普遍理解。编码后,浏览器会把这段字符串渲染为字面文本——<a> 标签会被显示出来,而不会被点击——这正是在页面中安全展示标记的方式。

默认模式下保留非 ASCII 字符

Visit our café — it's 😀
Visit our café — it&#x27;s 😀

「特殊字符」模式只处理 HTML 保留的五个字符,因此重音字母(café)、长破折号(—)和表情符号(😀)原样通过。这能让输出保持可读且字节精简,正是已声明 <meta charset="utf-8"> 的 UTF-8 页面所需要的。只有「it's」中的撇号被转义为 '。如果你需要把每个非 ASCII 字符都转换成实体以适配旧字符集,请勾选「编码所有非 ASCII」——参见下面的示例。

十进制数字实体

<>&"'
&#60;&#62;&#38;&#34;&#39;

把格式切换为十进制,每个特殊字符都会写成十进制数字字符引用:< 是 <,> 是 >,& 是 &," 是 ",' 是 '。十进制实体是兼容性最广的数字形式——每个符合规范的 HTML 和 XML 解析器都能识别——当你无法确定消费系统是否支持像 © 这样的命名实体时,它是稳妥之选。

十六进制数字实体

<>&"'
&#x3C;&#x3E;&#x26;&#x22;&#x27;

十六进制格式把每个字符写成十六进制数字引用:< 是 <,> 是 >,& 是 &," 是 ",' 是 '。十六进制和十进制可以互换——两者引用的是同一个 Unicode 码点——但十六进制与 Unicode 标准中你看到的 U+XXXX 记法一一对应,因此在记录或推理具体码点时,许多开发者更偏爱这种形式。

编码所有非 ASCII 字符

café
caf&eacute;  (named)  ·  caf&#233;  (decimal)  ·  caf&#xE9;  (hex)

勾选「编码所有非 ASCII 字符」后,每个高于 0x7F 的码点都会被转换成实体,而不仅仅是那五个保留字符。café 中的 é 会根据你选择的格式变成命名实体 é、十进制 é 或十六进制 é——三者引用的都是同一个字符 U+00E9。这种模式适用于以非 Unicode 字符集提供的页面,或会破坏原始 UTF-8 的系统,强制把所有内容转为 7 位安全的 ASCII 实体,保证文本在传输中完整无损。

如何使用 HTML 实体编码器

  1. 1

    粘贴你的 HTML 或文本

    把你想转义的标记或纯文本放入输入框。编码输出会随你键入实时更新——没有提交按钮,也不会把任何内容发送到任何地方。

  2. 2

    选择实体格式

    命名是可读的默认选项(<、&、©)。当消费系统偏好数字引用,或你无法保证命名实体被支持时,切换到十进制(<)或十六进制(<)。

  3. 3

    (可选)编码所有非 ASCII

    对于现代 UTF-8 页面,保持此项关闭,让重音和表情符号作为可读的原始字符。只有当文本必须经过旧的单字节字符集时才勾选它,这会把每个高于 0x7F 的字符转换成 ASCII 安全的实体。

  4. 4

    复制编码结果

    点击「复制」把转义后的字符串放入剪贴板,随时可粘贴到模板、文档页面或数据库字段中。「清空」会重置两个面板以处理下一个片段。

  5. 5

    需要反向?切换方向

    当你想把实体变回它们所代表的字符时,使用「切换方向」跳转到 HTML 实体解码器。

常见 HTML 编码错误

最后才转义与号,导致二次转义

如果你在 & 之前替换 < 和 >,刚刚创建的实体里的 & 会被再次转义,于是 < 变成 &lt; 并渲染为字面文本。始终最先转义 &。

✗ 错误
replace < and > first, then &  →  &lt;  becomes  &amp;lt;
✓ 正确
escape & first, then the rest  →  &lt;  stays  &lt;

在旧上下文中对撇号使用了 '

' 在 HTML4 中未定义,一些邮件客户端会字面显示它。在面向较旧或混合环境时,使用每个解析器都能识别的数字 ' 或 '。

✗ 错误
It&apos;s here  →  may render as  It&apos;s here
✓ 正确
It&#x27;s here  →  renders as  It's here

把数据编码了两次

把已转义的文本再次送入编码器会导致二次编码:& 变成 &amp;,用户看到的是 & 而不是 &。只在输出时精确转义一次。

✗ 错误
&amp;  encoded again  →  &amp;amp;  shows as  &amp;
✓ 正确
&amp;  left as-is  →  renders as  &

对 URL 或 JavaScript 上下文使用了 HTML 转义

HTML 实体并不能让一个值在 URL 或内联脚本内变得安全。URL 中的空格需要 %20,JavaScript 中的字符串需要 JS/JSON 转义。让编码与值落地之处匹配。

✗ 错误
href="/search?q=a&amp;b c"  →  the space still breaks the URL
✓ 正确
href="/search?q=a%26b%20c"  →  URL-encoded, valid

在 UTF-8 页面上不必要地编码了非 ASCII

在现代 UTF-8 页面上强行把 café 变成 café 会让源码膨胀、损害可读性而毫无收益。除非旧字符集确实需要实体,否则让非 ASCII 保持原始。

✗ 错误
caf&eacute; on a UTF-8 page  →  needless, harder to read
✓ 正确
café on a UTF-8 page  →  valid and clean

忘了转义属性值内的引号

在属性内插入未转义的 " 会让该值冲破并注入新属性——一个 XSS 向量。在属性上下文中始终转义 "(最好也转义 '),本工具默认会这么做。

✗ 错误
title="He said "hi""  →  attribute breaks out
✓ 正确
title="He said &quot;hi&quot;"  →  contained

谁在使用本工具

在网页上展示代码示例
在写需要展示字面 HTML 的教程或文档?转义片段,让 <strong>bold</strong> 显示为文本而非渲染出来。粘贴标记,复制转义后的输出,放入 <pre> 或 <code> 块中。
净化用户输入以防 XSS
在把任何用户提供的字符串插入 HTML 之前,转义那五个保留字符,让像 <script>…</script> 这样的载荷变成惰性文本。这是你手工构造标记时抵御跨站脚本攻击的基础防御。
把标记存入数据库字段或 JSON
需要把一段 HTML 片段作为纯字符串保存而不被下游解释?先编码它,让尖括号和与号在存储和重新显示中完整保留,再在取回时解码。
撰写邮件模板和 CMS 内容
邮件客户端和内容管理系统对原始特殊字符很不宽容。转义保留集——并可选地转义所有非 ASCII——让你的模板在可能与你字符集不一致的客户端间一致渲染。
为旧字符集转换文本
目标是一个无法处理原始 UTF-8 的系统?开启「编码所有非 ASCII」,把每个重音字母、符号和表情符号重写为 ASCII 安全的实体,保证文本在 7 位干净的管道中完好传输。
转义 XML 和 SVG 属性值
XML 和内联 SVG 共享 HTML 的保留字符。编码引号和尖括号,让带有嵌入标记的字符串安全地嵌入属性值,而不破坏文档结构。
快速查找实体
忘了商标符号是 ™ 还是 ™?键入该字符,从输出中读出它的命名、十进制和十六进制实体,或不离开页面就查阅内置速查表。

编码器如何工作

特殊字符模式(默认)
默认只转义 HTML 保留的五个字符——& < > " '——遵循 WHATWG HTML 序列化规则以获得安全输出。& 会被最先替换,这样为其他字符生成的实体不会被二次转义。所有其他字符,包括非 ASCII,都原样通过。
撇号使用 '
单引号不采用命名的 '——它在 HTML4 中未定义、在一些旧解析器中不安全——而是输出为数字 '(十进制 '),引用 U+0027。这与经过充分测试的 he 等库的约定一致,保证输出在 HTML4、HTML5 和 XML 中都安全。
命名、十进制和十六进制编码
格式选择器控制每个转义字符的写法:命名在有定义标签处使用标签(<、©),十进制以十进制写出 Unicode 码点(<),十六进制以十六进制写出(<)。数字形式引用与命名形式相同的码点,解析时可以互换。
「编码所有非 ASCII」选项
启用后,每个码点高于 0x7F 的字符都会以所选格式转换成实体——café 变成 café(命名)、café(十进制)或 café(十六进制)。表情符号等星形平面字符会用其完整码点编码(😀 → 😀)。这会产生 7 位干净的 ASCII 输出,用于旧式传输。
字符集与实体
字符集定义文本如何作为字节存储;实体则是仅用 ASCII 拼写一个字符的方式。在 UTF-8 页面上,非 ASCII 字符不需要实体,这就是默认让它们保持原始的原因。只有当输出必须穿过非 Unicode 字符集或对 UTF-8 不友好的系统时,才需要编码一切。
浏览器本地,零网络
编码在主线程上以 JavaScript 同步运行;没有 API 调用、没有到服务器的 worker 往返、没有持久化。输入永不离开页面,你可以在键入时观察空空的 Network 面板来确认。

HTML 转义最佳实践

在输出时、在正确的上下文中转义
在把数据插入 HTML 的那一刻编码,而非接收时,并让编码与上下文匹配。HTML 实体编码用于 HTML 元素和属性内容;URL 内用 URL 编码,脚本块内用 JavaScript/JSON 转义。在错误的上下文中转义会留下漏洞。
始终转义不受信任的输入
任何源自用户、上传或外部 API 的字符串,在落入你的标记之前都必须转义。这是核心的 XSS 防御:一旦尖括号变成实体,像 <script>alert(1)</script> 这样的载荷就变成了惰性文本。
优先使用现成的转义机制
React、Vue 和大多数服务器模板引擎会自动转义插值文本;设置 element.textContent 也会为你转义。把本工具用于一次性转换和理解输出——但在应用代码中,要依赖框架的自动转义而非自己手写。
在 UTF-8 页面上让非 ASCII 保持原始
如果你的页面声明了 <meta charset="utf-8">,不要把重音和表情符号编码成实体——原始 UTF-8 更短、更可读,而且同样正确。把「编码所有非 ASCII」留给真正需要的旧字符集场景。
在混合上下文中使用数字撇号
当输出可能被旧解析器、XML 处理器或邮件客户端消费时,对单引号优先用数字 ' 而非命名的 '。数字形式处处都能识别;命名形式则不然,渲染文本中冒出一个字面「'」是常见且可避免的错误。

常见问题

我编码文本时,文本会被发送到你们的服务器吗?
不会。每个字符都完全在你的浏览器中用 JavaScript 编码——打开 DevTools → Network,你会看到输入或粘贴时没有任何请求发出。什么都不会上传、不会记录、不会写入磁盘。这种隐私很重要,因为人们要转义的标记往往是敏感的:来自私有 CMS 的片段、内部邮件模板、客服回复,或一篇尚未发布的草稿博文。在服务器端编码器上,这些内容都会跨网络传到你无法掌控的机器上;而在这里,文本永远不会离开标签页。这正是要在客户端转义 HTML、而非粘贴到一个原则上可能保留所有处理内容副本的网站的全部理由。
转义 HTML 是什么意思,我为什么要这么做?
转义 HTML 意味着把浏览器原本会解释为标记的字符替换成它们的实体等价形式,从而让它们显示为字面文本。最经典的情形是在页面上展示代码:如果你想让访客读到字符串 <strong>bold</strong>,而不是看到「bold」一词被渲染成粗体,你就要把尖括号转义为 <strong>bold</strong>。另一个更重要的情形是安全:当你把不受信任的用户输入插入页面时,转义那五个保留字符(< > & " ')能防止输入冲破上下文、注入 <script> 标签——这是抵御跨站脚本攻击(XSS)的核心防线。任何源自用户、最终进入你 HTML 的文本都应先转义。
命名实体、十进制实体和十六进制实体有什么区别?
三者产生的是同一个字符;它们只是在引用的写法上不同。命名实体使用人类可读的标签——< 表示 <,& 表示 &,© 表示 ©——易于阅读,但只适用于有定义名称的字符。十进制数字实体以十进制写出 Unicode 码点,如 < 表示 < 或 é 表示 é。十六进制实体以十六进制写出同一个码点,如 < 表示 < 或 é 表示 é,与 Unicode 标准中的 U+XXXX 记法相对应。命名实体最易读,是常见保留字符的合理默认选择;数字实体(十进制或十六进制)可以编码任意码点,包括没有名称的字符,因此当你无法保证消费方支持某个特定命名实体时,它们是稳妥之选。
为什么撇号被编码成 ' 而不是 '?
因为 ' 并非处处安全。命名实体 ' 直到 HTML5 和 XML 才被引入——它未在 HTML4 中定义,因此一些旧解析器和邮件客户端会把它渲染成字面文本「'」而非撇号。数字引用 '(或其十进制孪生 ')映射到完全相同的字符 U+0027,并被有史以来每个符合规范的解析器识别。本工具沿用经过充分测试的 he 库的行为,为撇号输出通用兼容的 ',因此输出可以安全地放入任何 HTML、XML 或属性上下文而不会出意外。
我需要对 é、— 或 😀 这类非 ASCII 字符编码吗?
通常不需要。如果你的页面声明了 <meta charset="utf-8">——几乎每个现代页面都会——那么重音字母、长破折号和表情符号作为原始 UTF-8 是完全有效的,根本不需要编码。这正是默认的「特殊字符」模式不去碰它们的原因,从而让输出简短、可读。只有当文本将以旧的单字节字符集提供或存储,或要经过会破坏原始 UTF-8 的系统时,你才需要编码非 ASCII 字符。遇到这种情况就勾选「编码所有非 ASCII 字符」,每个高于 0x7F 的码点都会被转换成 ASCII 安全的实体。拿不准时,保持默认,并确认你的字符集声明正确。
转义 HTML 能保护我免受 XSS 攻击吗?
转义是 XSS 防御的基础,但它依赖上下文,所以诚实的回答是「正确应用时,能」。在把不受信任的输入放入 HTML 元素内容之前,对那五个保留字符编码,能可靠阻止攻击者注入标签或脚本——像 <script>alert(1)</script> 这样的载荷会变成惰性文本。需要注意的是,HTML 有多种上下文,每种都有自己的转义规则:在属性值内你必须转义引号(本工具会做),在 <script> 块或内联事件处理器内你需要的是 JavaScript 转义,而在 URL 内你需要的是 URL 编码。HTML 和属性上下文用 HTML 实体编码;URL 请使用 URL 编码器 / 解码器,把字符串嵌入 JavaScript 或 JSON 请参见 JSON 转义 工具。在输出时、在数据落地的上下文中进行编码。
如何反向操作——把实体变回字符?
使用配套的 HTML 实体解码器。它接收一串充满实体的字符串,如 <div> & ©,把它们转换回真实字符 <div> & ©,可处理命名实体、十进制引用、十六进制引用,乃至像缺少结尾分号的 &copy 这类旧式未终止实体。对保留字符而言,编码和解码是精确互逆的,因此你可以让文本在两个工具间往返而不丢失内容。如果你在调试为什么页面显示字面 &lt; 而非 <,解码器是查看这些实体实际解析结果的最快途径。
编码会改变可见文本或破坏我的布局吗?
不会——这恰恰是它的全部意义所在。实体只是字符的另一种拼写:当浏览器解析 < 时,它渲染出单个 < 字形,与原始字符完全一致。因此一个正确转义的页面对访客来说看起来与使用原始字符时一模一样;唯一的区别是浏览器把转义后的版本当作文本而非标记处理。转义改变的只有源字符串的长度和外观,这也是你只转义需要转义之物的原因。如果你的目标是整理并缩进杂乱的标记,而非转义它,那是另一项工作——请改用 HTML 格式化