免费 HTML 实体编码器 — 转义 HTML
在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。
你的文本在浏览器本地编码,绝不上传、记录或存储。它只留在本设备上。
选项 · 格式与编码选项
什么是 HTML 实体编码?
HTML 实体编码——也叫 HTML 转义——是把在 HTML 中具有特殊含义的字符替换成一种称为实体的安全文本表示的过程,从而让浏览器把它们显示为字面文本,而不是解释为标记。最重要的五个字符正是 HTML 用来构造文档的那些:开闭标签的尖括号 < 和 >、开启实体的与号 &,以及界定属性值的引号 " 和 '。当其中任何一个出现在应被展示而非执行的内容里时,就必须转义,否则浏览器会误读页面——轻则文本渲染错误,重则攻击者塞进一个 <script> 标签。
弄清这个工具做什么是有帮助的。它把文本编码成实体;它不组装或美化文档。如果你想把一串代码作为纯文本读到页面上,或在把用户提供的输入插入 HTML 时需要中和它,这就是合适的工具。如果你想缩进并整理已有标记,那是 HTML 格式化 的工作;要把实体变回字符,请用 HTML 实体解码器。
书写任何实体都有三种方式,并且可以互换。命名引用使用人性化标签(< 表示 <,© 表示 ©);十进制数字引用以十进制写出字符的 Unicode 码点(< 表示 <);十六进制引用以十六进制写出同一码点(< 表示 <),与 Unicode 标准的 U+XXXX 记法对应。命名实体最易读,但只对有定义名称的字符存在;数字实体可以表示任意码点,所以它们是稳妥的后备。下表列出你最常用到的实体:
| 字符 | 命名 | 十进制 | 十六进制 | |-----------|-------|---------|-----| | < | < | < | < | | > | > | > | > | | & | & | & | & | | " | " | " | " | | ' | ' | ' | ' | | (空格) | |   |   | | © | © | © | © | | ® | ® | ® | ® | | ™ | ™ | ™ | ™ | | € | € | € | € | | £ | £ | £ | £ | | — | — | — | — | | – | – | – | – | | … | … | … | … | | é | é | é | é |
请注意撇号写作 '(或 ')而非 ':命名的 ' 直到 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:
// < → < > → > & → & " → " ' → '
// Node.js — escape untrusted input before inserting it into HTML element content.
function escapeHtml(str) {
return str
.replace(/&/g, '&') // & first, so later entities are not double-escaped
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, '''); // numeric form — safe in HTML4, HTML5 and XML
}
const userInput = `<a href="x">Tom & Jerry's</a>`;
const safe = escapeHtml(userInput);
// → <a href="x">Tom & Jerry's</a>
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>
<a href="x">Tom & Jerry's</a>
在默认的「特殊字符」模式下,编码器只重写在 HTML 标记中具有特殊含义的五个字符:< 变成 <,> 变成 >,& 变成 &," 变成 ",' 变成 '。撇号采用数字形式 ' 而非命名实体 ',因为 ' 未在 HTML4 中定义,旧解析器可能无法识别,而十六进制形式则被普遍理解。编码后,浏览器会把这段字符串渲染为字面文本——<a> 标签会被显示出来,而不会被点击——这正是在页面中安全展示标记的方式。
默认模式下保留非 ASCII 字符
Visit our café — it's 😀
Visit our café — it's 😀
「特殊字符」模式只处理 HTML 保留的五个字符,因此重音字母(café)、长破折号(—)和表情符号(😀)原样通过。这能让输出保持可读且字节精简,正是已声明 <meta charset="utf-8"> 的 UTF-8 页面所需要的。只有「it's」中的撇号被转义为 '。如果你需要把每个非 ASCII 字符都转换成实体以适配旧字符集,请勾选「编码所有非 ASCII」——参见下面的示例。
十进制数字实体
<>&"'
<>&"'
把格式切换为十进制,每个特殊字符都会写成十进制数字字符引用:< 是 <,> 是 >,& 是 &," 是 ",' 是 '。十进制实体是兼容性最广的数字形式——每个符合规范的 HTML 和 XML 解析器都能识别——当你无法确定消费系统是否支持像 © 这样的命名实体时,它是稳妥之选。
十六进制数字实体
<>&"'
<>&"'
十六进制格式把每个字符写成十六进制数字引用:< 是 <,> 是 >,& 是 &," 是 ",' 是 '。十六进制和十进制可以互换——两者引用的是同一个 Unicode 码点——但十六进制与 Unicode 标准中你看到的 U+XXXX 记法一一对应,因此在记录或推理具体码点时,许多开发者更偏爱这种形式。
编码所有非 ASCII 字符
café
café (named) · café (decimal) · café (hex)
勾选「编码所有非 ASCII 字符」后,每个高于 0x7F 的码点都会被转换成实体,而不仅仅是那五个保留字符。café 中的 é 会根据你选择的格式变成命名实体 é、十进制 é 或十六进制 é——三者引用的都是同一个字符 U+00E9。这种模式适用于以非 Unicode 字符集提供的页面,或会破坏原始 UTF-8 的系统,强制把所有内容转为 7 位安全的 ASCII 实体,保证文本在传输中完整无损。
如何使用 HTML 实体编码器
- 1
粘贴你的 HTML 或文本
把你想转义的标记或纯文本放入输入框。编码输出会随你键入实时更新——没有提交按钮,也不会把任何内容发送到任何地方。
- 2
选择实体格式
命名是可读的默认选项(<、&、©)。当消费系统偏好数字引用,或你无法保证命名实体被支持时,切换到十进制(<)或十六进制(<)。
- 3
(可选)编码所有非 ASCII
对于现代 UTF-8 页面,保持此项关闭,让重音和表情符号作为可读的原始字符。只有当文本必须经过旧的单字节字符集时才勾选它,这会把每个高于 0x7F 的字符转换成 ASCII 安全的实体。
- 4
复制编码结果
点击「复制」把转义后的字符串放入剪贴板,随时可粘贴到模板、文档页面或数据库字段中。「清空」会重置两个面板以处理下一个片段。
- 5
需要反向?切换方向
当你想把实体变回它们所代表的字符时,使用「切换方向」跳转到 HTML 实体解码器。
常见 HTML 编码错误
最后才转义与号,导致二次转义
如果你在 & 之前替换 < 和 >,刚刚创建的实体里的 & 会被再次转义,于是 < 变成 < 并渲染为字面文本。始终最先转义 &。
replace < and > first, then & → < becomes &lt;
escape & first, then the rest → < stays <
在旧上下文中对撇号使用了 '
' 在 HTML4 中未定义,一些邮件客户端会字面显示它。在面向较旧或混合环境时,使用每个解析器都能识别的数字 ' 或 '。
It's here → may render as It's here
It's here → renders as It's here
把数据编码了两次
把已转义的文本再次送入编码器会导致二次编码:& 变成 &,用户看到的是 & 而不是 &。只在输出时精确转义一次。
& encoded again → &amp; shows as &
& left as-is → renders as &
对 URL 或 JavaScript 上下文使用了 HTML 转义
HTML 实体并不能让一个值在 URL 或内联脚本内变得安全。URL 中的空格需要 %20,JavaScript 中的字符串需要 JS/JSON 转义。让编码与值落地之处匹配。
href="/search?q=a&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é 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 "hi"" → 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 处理器或邮件客户端消费时,对单引号优先用数字 ' 而非命名的 '。数字形式处处都能识别;命名形式则不然,渲染文本中冒出一个字面「'」是常见且可避免的错误。
常见问题
我编码文本时,文本会被发送到你们的服务器吗?
转义 HTML 是什么意思,我为什么要这么做?
命名实体、十进制实体和十六进制实体有什么区别?
为什么撇号被编码成 ' 而不是 '?
我需要对 é、— 或 😀 这类非 ASCII 字符编码吗?
转义 HTML 能保护我免受 XSS 攻击吗?
如何反向操作——把实体变回字符?
编码会改变可见文本或破坏我的布局吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
.env 转 JSON 转换器
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。
免费 HTML 实体解码器 — 解码 HTML
编码和格式化
在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。
HTML 转 Markdown 转换器
编码和格式化
在浏览器中将 HTML 转换为干净的 Markdown——支持 GFM 表格、任务列表和链接。可选 ATX/Setext 标题及内联或引用链接。非常适合迁移网页内容或喂给 LLM。100% 私密,无需上传。