Skip to main content
UFOZoo

HTML实体编码解码 在线转义特殊字符工具

HTML实体编码工具,把<、>、&、"等特殊字符转义为实体,防止XSS注入,适合在网页中安全显示代码,支持双向转换使用。

更新于 2026-08-26

相关工具

功能特性

  • 实时编码或解码 HTML 实体
  • 支持命名实体(&amp;)、十进制(&#38;)和十六进制(&#x26;)引用
  • 编码全部非 ASCII 字符选项,适合国际化内容兼容性
  • 输入即更新,无需点击
  • 拖拽选择、一键复制、保存为 .txt 文件
  • 一次性编码全部五个 XML 敏感字符(<、>、&、"、')
  • 将实体编码字符串自动解码回原始字符
  • 字符级和字节级长度计数器,方便控制内容大小
  • 重复编码会把已有实体双重编码(&amp; → &amp;amp;),先解码再编码即可避免

使用方法

  1. 1在输入区域粘贴文本,一键切换编码和解码。
  2. 2启用「编码全部非 ASCII」可将非 ASCII 字符(é、中文、🚀)转为数字实体。
  3. 3结果实时更新。使用复制或保存按钮保存。
  4. 4嵌入代码片段到博客文章前先编码:粘贴代码,复制编码版本以防止 HTML 渲染问题。
  5. 5解码 RSS 内容或使用数字实体的 HTML 邮件模板:粘贴编码文本并切换到解码模式查看原始内容。
  6. 6与其他开发者共享编码内容时使用命名实体输出,可读性更好。
  7. 7使用十进制或十六进制数字实体以获得任何 Unicode 字符的通用支持,尤其在命名实体不存在时。
  8. 8在国际化内容发布到不支持 UTF-8 的旧版 CMS 系统前,启用「编码全部非 ASCII」选项。
  9. 9通过打开文件批量处理多个代码片段,一次编码全部内容并保存结果。
  10. 10将编码输出粘贴到浏览器的开发者工具控制台中验证渲染是否正确。

常见问题

什么是 HTML 实体编码?

HTML 实体编码将 HTML 中有特殊含义的字符(<、>、&、"、')转换为安全的实体表示(如 &lt;、&gt;、&amp;),防止浏览器将其解释为标记。这在显示代码片段和防止 XSS 攻击时至关重要。

命名实体、十进制和十六进制有什么区别?

命名实体使用描述性名称,如 &amp; 或 &lt;。十进制数字实体使用 &#38;(十进制码点)。十六进制数字实体使用 &#x26;(十六进制码点)。命名实体更易读,但数字实体适用于任何 Unicode 字符。在 HTML5 中它们都是有效的。

「编码全部非 ASCII」选项有什么用?

启用后,所有非 ASCII 字符(包括 emoji、中文、重音字母等)都会转换为数字实体如 &#233;。这对不支持 UTF-8 的旧系统很有用,或需要确保跨不同字符编码的最大兼容性时使用。

PHP、JavaScript、Java 里怎么做 HTML 实体编码/解码?

PHP:htmlentities($str, ENT_QUOTES, 'UTF-8') 编码,html_entity_decode 反向解码。JavaScript 没有内置编码函数,解码可以用临时 textarea(el.innerHTML = str 后再读 el.value),编码则手动替换五个字符或使用 he 库。Java:用 Apache Commons Text 的 StringEscapeUtils.escapeHtml4 / unescapeHtml4。本工具免配置就能完成同样的事。

HTML 实体编码的规则是什么?哪些字符必须转义?

文本内容里必须转义的只有三个:&、<、>。引号(" 和 ')只在属性值中才需要转义。空格、/、= 和字母从不需要转义。& 必须最先转义,因为它会开启实体语法:未转义的 & 会让浏览器误以为后面是实体名,从而破坏后续文本。

什么时候应该使用 HTML 实体编码?

在网页中显示用户生成内容时(XSS 防护)、在博客文章或文档中嵌入代码片段时、或将特殊字符插入 HTML 属性时使用实体编码。现代框架(如 React)默认自动转义,但在使用 raw innerHTML、CMS 导出和邮件模板时需要手动编码。

HTML 实体编码能防止 XSS 攻击吗?

是的,将用户输入编码为 HTML 实体是防止 XSS(跨站脚本)攻击的主要防御手段。通过将 < 转换为 &lt;,> 转换为 &gt;,浏览器不会解释注入的 HTML 标签或脚本。在 HTML 页面中渲染用户生成内容之前,始终先编码。

编码 HTML 实体时会转换哪些字符?

五个基本字符是:&(ampersand → &amp;)、<(小于号 → &lt;)、>(大于号 → &gt;)、"(双引号 → &quot;)和 '(单引号 → &#39;)。「编码全部非 ASCII」选项额外将 ASCII 范围外的任何字符转换为数字实体。

可以编码混合内容(HTML + 纯文本)吗?

可以。工具把输入当作纯文本处理:对字符做转义,不尝试解析 HTML。这意味着编码时已存在的实体(如 &amp;)会被双重编码(&amp;amp;)。解码模式下,已存在的实体能正确还原为字符。

如何避免双重编码?

双重编码发生在给已包含实体的文本编码时(例如再次编码 &amp; 会产生 &amp;amp;)。为避免这种情况,先用解码模式将实体恢复为原始字符,再编码;解码会把每个实体还原为原始字符,第二次编码时就没有可重复编码的内容了。

&amp; 和 &#38; 有什么区别?

都表示 & 符号。&amp; 是命名实体,可读性更好、更直观。&#38; 是十进制数字实体,使用字符的 Unicode 码点(38 = 0x26)。&#x26; 是十六进制等价形式。在 HTML5 中都有效,浏览器渲染效果完全相同。

什么时候使用「编码全部非 ASCII」选项?

在目标邮件客户端使用 ISO-8859-1 等旧版字符编码时,或发布内容到已知会错误处理 UTF-8 的 CMS 平台时使用。它将 emoji、中文、重音字母等 Unicode 字符转换为数字实体,确保在任何地方都能正确渲染。

为什么我的实体显示成问号或乱码?

这说明渲染实体的页面、数据库或文件没有使用 UTF-8。经典案例是 latin1 或 GBK 编码的 MySQL 表:&#8217; 这样的数字实体被按原始字节存储,取出来就变成「?」或乱码。请检查三处:数据库连接字符集(MySQL 用 utf8mb4)、页面的 meta charset(UTF-8)、以及 HTTP Content-Type 响应头。实体本身永远是正确的,问题出在渲染环境。

为什么编码结果放进 JSON 或 JavaScript 字符串里就失效了?

HTML 实体只由 HTML 解析器解码。在 <script> 代码块或 JSON 字符串里,&lt; 会保持字面文本原样显示,表现为输出损坏。JavaScript 场景应使用字符串转义如 \u003C,JSON 场景依赖 JSON.stringify 自身的转义规则。本在线 HTML 实体编码/解码器面向 HTML 场景:文本节点、属性和标记;嵌入其他地方前请先用本工具解码。

为什么编码后文本变长了很多?

每个被转义的字符都会展开:& 变成 &amp;(5 个字符),' 变成 &#39;(5 个字符),< 变成 &lt;(4 个字符)。特殊字符占 10% 的文本体积大约增加 30-40%;以符号为主的字符串可能膨胀到 3 倍。工具中的字节计数器会显示精确的体积变化。如果对体积敏感,只转义必需的字符(&、<、>),或在传输前用 gzip 压缩。