HTML 实体编解码
编码HTML 实体的编码与解码——命名、十进制与十六进制。
本页内容
什么是 HTML 实体编码?#
HTML 给少数几个字符赋予了特殊身份:< 和 > 用来界定标签,& 用来开启实体或字符引用," 和 ' 用来给属性值加引号。当你要让这些字符以字面文本的身份出现在页面上——给用户展示一段代码、把搜索词回填到输入框、显示一行 Tom & Jerry——就必须把它替换成一个叫实体(entity)的替身。这层替换,就是 HTML 实体编码。
同一个转义有三种写法,本工具用 Options(选项)选择器全部提供:
- Named(命名)——
&变&、<变<,以此类推。可读性最好,也是人们手写时唯一会用的形式。此模式下只转义那五个有结构危险的字符,其余一律原样放过。 - Decimal(十进制)——每个非 ASCII 或控制字符都写成
&#N;,N是它的 Unicode 码点(十进制),比如©变©。适合想让每一个非标准字节都显式可见、又保持 ASCII 安全的场景。 - Hex(十六进制)——同样的思路,码点用十六进制写:
©变©。更紧凑,和 Unicode 表里常见的码点记法天然对齐。
解码端识别一份精选的 HTML5 命名实体子集,外加 &#NN;(十进制)和 &#xHH;(十六进制)。遇到不认识的命名实体会原样保留,而不是瞎猜——这比悄悄吐出一个错字符要安全得多。
怎么使用#
- 用左上角的 编码 / 解码(Encode / Decode)开关选方向。
- 在 Options 里选 Named、Decimal 或 Hex。
- 在左侧 输入 框粘贴内容。
- 从右侧 输出 框读取转义(或还原)后的结果,点 复制(Copy)取走。
- 示例(Sample)载入演示串,清空(Clear)重置两边。
主要特性#
- 一个选择器三种风格。 命名、十进制、十六进制之间一键切换,不用重新粘贴,比对输出非常方便。
- 正确处理增补平面字符。 按 Unicode 码点(而非 UTF-16 码元)迭代,所以
🌍这种 emoji 被当作一个字符(🌍),而不是一对破碎的代理项。 - 精选且安全的解码表。 命名实体映射覆盖常见的 HTML5 引用(版权、商标、带音标的字母、数学符号、引号与破折号等)。不认识的名字原样放过,不会乱改。
- 不碰 DOM。 编解码都是纯字符串操作,没有暗中的
<div>注入,逻辑完全可测,工具本身也不会把你的输入当成标记去解释。
实例演示#
取一段混了标记和字面符号的文本:
<a href="x">Tom & Jerry</a> © 2026
Named 模式下只转义那五个危险字符,© 不动(它没有结构危险):
<a href="x">Tom & Jerry</a> © 2026
切到 Decimal,© 也被转成码点,那几个核心字符也换成数字形式:
<a href="x">Tom & Jerry</a> © 2026
Hex 模式下,同样的字符以十六进制码点呈现:
<a href="x">Tom & Jerry</a> © 2026
解码是上述的逆操作:选中 解码,把三种输出里任意一种贴回来,都能得到原始片段,© 也原样回来。
常见问题#
把字符串放进 HTML,用哪种模式才安全?#
绝大多数情况下,Named 就是那五个危险字符的正确默认——可读、所有浏览器都认、便于 diff。只有当你确实需要让每个非 ASCII 字符都变成 ASCII 安全(比如要穿过一个拒绝高字节的传输通道)时,才考虑 Decimal 或 Hex,普通转义用不着它们。
我解码 © 能识别,但 &mytag; 这种怪名字原样不动,为什么?#
解码器只解析它真正认识的实体——一份精选的 HTML5 常用命名子集。&mytag; 不是真正的 HTML 实体,工具选择原样保留,而不是猜或丢掉。如果你真的需要解析 DTD 里定义的每一个实体,那已经超出”字符串转换器”的范畴,需要真正的 HTML 解析器。
HTML 转义之后,用户输入放进 JS 字符串或 URL 就安全了吗?#
不。每个上下文有各自的规则。HTML 转义防的是注入标记,但像 '); alert(1); // 这样的字符串在 HTML 里无害,放进 <script> 里就危险。同样的输入进链接之前还得做 URL 编码。要针对目标上下文转义,不是转一次就万事大吉。
十六进制输出为什么用小写(© 而不是 ©)?#
小写十六进制是约定俗成、更整洁的写法,任何浏览器解析起来都一样。如果你的风格指南要求大写,要么用十进制模式(©)绕开这个问题,要么自行把输出过一遍大小写转换。