工具
指南

HTML 实体编解码

编码

HTML 实体的编码与解码——命名、十进制与十六进制。

100% 客户端 无后端
输入
输出
本页内容

什么是 HTML 实体编码?#

HTML 给少数几个字符赋予了特殊身份:<> 用来界定标签,& 用来开启实体或字符引用,"' 用来给属性值加引号。当你要让这些字符以字面文本的身份出现在页面上——给用户展示一段代码、把搜索词回填到输入框、显示一行 Tom & Jerry——就必须把它替换成一个叫实体(entity)的替身。这层替换,就是 HTML 实体编码。

同一个转义有三种写法,本工具用 Options(选项)选择器全部提供:

  • Named(命名)——&&amp;<&lt;,以此类推。可读性最好,也是人们手写时唯一会用的形式。此模式下只转义那五个有结构危险的字符,其余一律原样放过。
  • Decimal(十进制)——每个非 ASCII 或控制字符都写成 &#N;N 是它的 Unicode 码点(十进制),比如 ©&#169;。适合想让每一个非标准字节都显式可见、又保持 ASCII 安全的场景。
  • Hex(十六进制)——同样的思路,码点用十六进制写:©&#xa9;。更紧凑,和 Unicode 表里常见的码点记法天然对齐。

解码端识别一份精选的 HTML5 命名实体子集,外加 &#NN;(十进制)和 &#xHH;(十六进制)。遇到不认识的命名实体会原样保留,而不是瞎猜——这比悄悄吐出一个错字符要安全得多。

怎么使用#

  1. 用左上角的 编码 / 解码(Encode / Decode)开关选方向。
  2. Options 里选 NamedDecimalHex
  3. 在左侧 输入 框粘贴内容。
  4. 从右侧 输出 框读取转义(或还原)后的结果,点 复制(Copy)取走。
  5. 示例(Sample)载入演示串,清空(Clear)重置两边。

主要特性#

  • 一个选择器三种风格。 命名、十进制、十六进制之间一键切换,不用重新粘贴,比对输出非常方便。
  • 正确处理增补平面字符。 按 Unicode 码点(而非 UTF-16 码元)迭代,所以 🌍 这种 emoji 被当作一个字符(&#x1f30d;),而不是一对破碎的代理项。
  • 精选且安全的解码表。 命名实体映射覆盖常见的 HTML5 引用(版权、商标、带音标的字母、数学符号、引号与破折号等)。不认识的名字原样放过,不会乱改。
  • 不碰 DOM。 编解码都是纯字符串操作,没有暗中的 <div> 注入,逻辑完全可测,工具本身也不会把你的输入当成标记去解释。

实例演示#

取一段混了标记和字面符号的文本:

<a href="x">Tom & Jerry</a> © 2026

Named 模式下只转义那五个危险字符,© 不动(它没有结构危险):

&lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&lt;/a&gt; © 2026

切到 Decimal© 也被转成码点,那几个核心字符也换成数字形式:

&#60;a href=&#34;x&#34;&#62;Tom &#38; Jerry&#60;/a&#62; &#169; 2026

Hex 模式下,同样的字符以十六进制码点呈现:

&#x3c;a href=&#x22;x&#x22;&#x3e;Tom &#x26; Jerry&#x3c;/a&#x3e; &#xa9; 2026

解码是上述的逆操作:选中 解码,把三种输出里任意一种贴回来,都能得到原始片段,© 也原样回来。

常见问题#

把字符串放进 HTML,用哪种模式才安全?#

绝大多数情况下,Named 就是那五个危险字符的正确默认——可读、所有浏览器都认、便于 diff。只有当你确实需要让每个非 ASCII 字符都变成 ASCII 安全(比如要穿过一个拒绝高字节的传输通道)时,才考虑 DecimalHex,普通转义用不着它们。

我解码 &copy; 能识别,但 &mytag; 这种怪名字原样不动,为什么?#

解码器只解析它真正认识的实体——一份精选的 HTML5 常用命名子集。&mytag; 不是真正的 HTML 实体,工具选择原样保留,而不是猜或丢掉。如果你真的需要解析 DTD 里定义的每一个实体,那已经超出”字符串转换器”的范畴,需要真正的 HTML 解析器。

HTML 转义之后,用户输入放进 JS 字符串或 URL 就安全了吗?#

不。每个上下文有各自的规则。HTML 转义防的是注入标记,但像 '); alert(1); // 这样的字符串在 HTML 里无害,放进 <script> 里就危险。同样的输入进链接之前还得做 URL 编码。要针对目标上下文转义,不是转一次就万事大吉。

十六进制输出为什么用小写(&#xa9; 而不是 &#xA9;)?#

小写十六进制是约定俗成、更整洁的写法,任何浏览器解析起来都一样。如果你的风格指南要求大写,要么用十进制模式(&#169;)绕开这个问题,要么自行把输出过一遍大小写转换。