HTML实体编码解码 在线转义特殊字符工具
HTML实体编码工具,把<、>、&、"等特殊字符转义为实体,防止XSS注入,适合在网页中安全显示代码,支持双向转换使用。
更新于 2026-08-26
相关工具
功能特性
- 实时编码或解码 HTML 实体
- 支持命名实体(&)、十进制(&)和十六进制(&)引用
- 编码全部非 ASCII 字符选项,适合国际化内容兼容性
- 输入即更新,无需点击
- 拖拽选择、一键复制、保存为 .txt 文件
- 一次性编码全部五个 XML 敏感字符(<、>、&、"、')
- 将实体编码字符串自动解码回原始字符
- 字符级和字节级长度计数器,方便控制内容大小
- 重复编码会把已有实体双重编码(& → &amp;),先解码再编码即可避免
使用方法
- 1在输入区域粘贴文本,一键切换编码和解码。
- 2启用「编码全部非 ASCII」可将非 ASCII 字符(é、中文、🚀)转为数字实体。
- 3结果实时更新。使用复制或保存按钮保存。
- 4嵌入代码片段到博客文章前先编码:粘贴代码,复制编码版本以防止 HTML 渲染问题。
- 5解码 RSS 内容或使用数字实体的 HTML 邮件模板:粘贴编码文本并切换到解码模式查看原始内容。
- 6与其他开发者共享编码内容时使用命名实体输出,可读性更好。
- 7使用十进制或十六进制数字实体以获得任何 Unicode 字符的通用支持,尤其在命名实体不存在时。
- 8在国际化内容发布到不支持 UTF-8 的旧版 CMS 系统前,启用「编码全部非 ASCII」选项。
- 9通过打开文件批量处理多个代码片段,一次编码全部内容并保存结果。
- 10将编码输出粘贴到浏览器的开发者工具控制台中验证渲染是否正确。
常见问题
什么是 HTML 实体编码?
HTML 实体编码将 HTML 中有特殊含义的字符(<、>、&、"、')转换为安全的实体表示(如 <、>、&),防止浏览器将其解释为标记。这在显示代码片段和防止 XSS 攻击时至关重要。
命名实体、十进制和十六进制有什么区别?
命名实体使用描述性名称,如 & 或 <。十进制数字实体使用 &(十进制码点)。十六进制数字实体使用 &(十六进制码点)。命名实体更易读,但数字实体适用于任何 Unicode 字符。在 HTML5 中它们都是有效的。
「编码全部非 ASCII」选项有什么用?
启用后,所有非 ASCII 字符(包括 emoji、中文、重音字母等)都会转换为数字实体如 é。这对不支持 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(跨站脚本)攻击的主要防御手段。通过将 < 转换为 <,> 转换为 >,浏览器不会解释注入的 HTML 标签或脚本。在 HTML 页面中渲染用户生成内容之前,始终先编码。
编码 HTML 实体时会转换哪些字符?
五个基本字符是:&(ampersand → &)、<(小于号 → <)、>(大于号 → >)、"(双引号 → ")和 '(单引号 → ')。「编码全部非 ASCII」选项额外将 ASCII 范围外的任何字符转换为数字实体。
可以编码混合内容(HTML + 纯文本)吗?
可以。工具把输入当作纯文本处理:对字符做转义,不尝试解析 HTML。这意味着编码时已存在的实体(如 &)会被双重编码(&amp;)。解码模式下,已存在的实体能正确还原为字符。
如何避免双重编码?
双重编码发生在给已包含实体的文本编码时(例如再次编码 & 会产生 &amp;)。为避免这种情况,先用解码模式将实体恢复为原始字符,再编码;解码会把每个实体还原为原始字符,第二次编码时就没有可重复编码的内容了。
& 和 & 有什么区别?
都表示 & 符号。& 是命名实体,可读性更好、更直观。& 是十进制数字实体,使用字符的 Unicode 码点(38 = 0x26)。& 是十六进制等价形式。在 HTML5 中都有效,浏览器渲染效果完全相同。
什么时候使用「编码全部非 ASCII」选项?
在目标邮件客户端使用 ISO-8859-1 等旧版字符编码时,或发布内容到已知会错误处理 UTF-8 的 CMS 平台时使用。它将 emoji、中文、重音字母等 Unicode 字符转换为数字实体,确保在任何地方都能正确渲染。
为什么我的实体显示成问号或乱码?
这说明渲染实体的页面、数据库或文件没有使用 UTF-8。经典案例是 latin1 或 GBK 编码的 MySQL 表:’ 这样的数字实体被按原始字节存储,取出来就变成「?」或乱码。请检查三处:数据库连接字符集(MySQL 用 utf8mb4)、页面的 meta charset(UTF-8)、以及 HTTP Content-Type 响应头。实体本身永远是正确的,问题出在渲染环境。
为什么编码结果放进 JSON 或 JavaScript 字符串里就失效了?
HTML 实体只由 HTML 解析器解码。在 <script> 代码块或 JSON 字符串里,< 会保持字面文本原样显示,表现为输出损坏。JavaScript 场景应使用字符串转义如 \u003C,JSON 场景依赖 JSON.stringify 自身的转义规则。本在线 HTML 实体编码/解码器面向 HTML 场景:文本节点、属性和标记;嵌入其他地方前请先用本工具解码。
为什么编码后文本变长了很多?
每个被转义的字符都会展开:& 变成 &(5 个字符),' 变成 '(5 个字符),< 变成 <(4 个字符)。特殊字符占 10% 的文本体积大约增加 30-40%;以符号为主的字符串可能膨胀到 3 倍。工具中的字节计数器会显示精确的体积变化。如果对体积敏感,只转义必需的字符(&、<、>),或在传输前用 gzip 压缩。