HTML 实体解码 — 将 HTML 实体解码为纯文本
将 HTML 实体(如 &、<、A、A)解码回原始字符。全程在浏览器中完成,无上传、无限制。
HTML 实体的存在有三个原因:HTML 标记中有特殊含义的字符(& 与尖括号)、键盘上没有的字符(©、em-dash、智能引号)、以及视觉上容易混淆的字符(不间断空格、零宽连字)。当浏览器渲染 HTML 时,实体自动解码 —— 用户看到的不是 ©,而是 © 符号。当 HTML 被不理解实体的工具处理时(CSV 导入、带有 VARCHAR 约束的数据库列、搜索引擎索引),实体以原文形式出现,文档变得无法阅读。把实体解码回字符就是解决办法。
实体解码中「不那么显然」的一点是命名实体与数字实体的区别。命名实体(&、<、©)是 W3C 维护的封闭列表 —— HTML5 中大约 2,000 条,覆盖常见情况以及 Latin-1 时代遗留实体的长尾。数字实体(A、A)是通用的 —— 每个 Unicode 码点都有对应的数字实体,包括 Unicode 15.0 及之后新增的字符。HTML5 规范实际上要求浏览器只在特定上下文中识别命名实体;数字实体则在任何位置都能识别。对于解码来说,工具同时接受两种形式并统一处理。
最后做个交接:如果输入是 HTML 内容(CMS 导出、邮件正文、爬取的页面),在做任何后续处理之前先过一遍解码器通常是正确第一步。如果目标是数据库或搜索引擎索引,通常必须先解码 —— 大多数数据库按原样存储字符,大多数搜索引擎对解码后的形式做分词。如果目标是另一个 HTML 页面,则不需要解码 —— 浏览器渲染时会自动解码。
使用方法
粘贴包含实体的文本
把文本放入输入区。命名实体(&、<、©)和数字实体(A、A)在同一次处理中一起解码。
查看解码结果
输出会随着输入实时更新。数字实体可以是十进制(A)或十六进制(A),解析器会根据 `#` 之后的 `x` 前缀自动判断格式。
复制解码结果
把纯文本结果复制到剪贴板,或下载为 .txt 文件。解码器不会改动非实体字符,输出等于原文减去实体语法。
常见问题
命名实体和数字实体有什么区别?
命名实体使用助记缩写(`&` 表示 &,`<` 表示 <,`©` 表示 ©)。数字实体使用码点 —— 十进制(`A` 表示 A)或十六进制(`A` 表示 A)。HTML 5 定义了 2,000 多个命名实体;数字实体则覆盖了每一个 Unicode 码点。
同一个字符为什么同时存在十进制和十六进制两种形式?
数字实体可以使用十进制(base 10,A)或十六进制(base 16,A),两者解码为同一字符。十进制是 HTML 2.0 的原始形式;十六进制后来加入,对高码点字符(如 emoji,😀 vs 😀)更紧凑。
解码器支持 HTML5 命名实体吗?
支持 —— 解析器遵循 HTML5 命名字符引用列表,覆盖 2,125 个命名实体,包括 `Ä` 这类遗留实体和 ` ` 这类现代实体。底层 `he` 库已完整编码 W3C 列表。
遇到格式错误的实体怎么办?
格式错误的实体(缺少分号、未知名称、数值损坏)会按原样作为字面量文本保留。工具不会悄悄丢弃它们 —— 输出中 `¬anentity;` 仍为 `¬anentity;`,便于你发现输入中的问题,而不会被静默破坏。
它能解码双重编码的文本吗?
不能 —— 解码器只执行一次。双重编码的文本(如 `&amp;`)只会解开一层,得到 `&`,而不是两层的 `&`。如需剥开多层编码,把输出再过一次解码器即可。
限制说明
- 单次解码解码器对输入只跑一轮。双重或三重编码的文本只会被部分解码 —— `&amp;` 变为 `&`,而不是 `&`。需要剥开多层时,把输出再送回工具。
- 不会丢弃未知实体格式错误或未知的实体按字面量文本原样保留。这是有意为之 —— 静默丢弃会掩盖错误。如果你怀疑输入有问题,检查输出中残留的 `&` 字符。
- 不做属性模式解码HTML 属性解码(例如单引号属性中的 `'`)与内容解码的规则略有不同。本工具采用内容规则;如需属性模式解码,请在后续步骤中使用更严格的解析器。
平台说明
- macOS
- macOS 的 TextEdit 在粘贴时不会解码实体。从 CMS、邮件或文档页复制的 HTML 如果要去掉散落的 `&` 字符后再作为纯文本使用,这个浏览器工具是合适的选择。
- Windows
- Windows 的记事本和 Notepad++ 都不会自动解码实体。从邮件、聊天窗口或 CMS 复制的 HTML 片段需要变成可读的纯文本,这个浏览器工具是合适的选择。
- Linux
- 命令行场景下,`sed 's/&#\([0-9]\+\);/\1/g'` 可以处理十进制实体。从 CMS、RSS 订阅或 API 响应来的混合命名实体与数字实体(`sed` 处理会乱),这个浏览器工具是合适的选择。
- Web
- 完全在客户端运行。页面加载完成后可以离线使用。在无法使用命令行工具的受限环境中,解码 HTML 片段很方便。