HTML 实体编码 — 将文本编码为 HTML 实体
将特殊字符编码为 HTML 实体(&、<、>、©)。完全在浏览器中运行,无上传、无限制。
HTML 实体编码是解码的逆过程:把那些在 HTML 标记里具有特殊含义(或者在键盘上不容易敲出来)的字符,转换成任何 HTML 解析器都能识别的实体语法。在 HTML 内容里绝对必须编码的三个字符是 <、>、& —— 前两个是界定标签的尖括号,后一个是引入实体的和号。如果不编码,HTML 解析器会把它们当作标记而不是内容,于是像 if a < b && b < c 这样的字符串就会变成一个破碎的页面。编码正是让字符串可以安全嵌入 HTML 的关键。
在命名实体、数值十进制和数值十六进制之间的选择主要是风格偏好,但也有一些实际的差别。命名实体(&、©)是最易读的形式,也是 1990 年代 HTML 作者手写的形式。数值实体(&、&)则具备普遍性 —— 它们覆盖了每一个 Unicode 字符,而不只局限于大约 2,000 个有命名的那些。对于高码点字符,数值十六进制最为紧凑(U+1F600 的 Emoji 在十进制下是 😀,在十六进制下是 😀)。在更窄的场景里 —— 当文本要插入 HTML 属性时 —— HTML-safe-only 模式只编码那五个会破坏属性引号的字符(<、>、&、\"、'),其余保留为原始 UTF-8,让输出保持易读。
最后再聊一下交接:目标端如果是 HTML 文档或嵌在另一个文档里的 HTML 片段,三种模式任选其一都行。目标端如果是包含 HTML 的 JSON 字符串(在 CMS API 和富文本编辑器里很常见),先对 HTML 进行实体编码,再对整段字符串做 JSON 转义。目标端如果是 JavaScript 源码或 CSS 文件,HTML 实体就不适用了 —— 这时应改用 JavaScript 字符串转义或 CSS 字符串转义。本工具只处理 HTML —— 在合适的上下文使用合适的工具,能省去一层调试的麻烦。
使用方法
输入或粘贴文本
把文本放入输入区。编码器不会改动 ASCII 字母和数字 —— 只对那些有 HTML 实体对应形式的字符进行编码,让输出保持可读。
选择编码模式
默认是命名实体(`&`、`©`)。可切换到数值十进制(`&`)、数值十六进制(`&`),或者 HTML-safe-only(只编码 `<`、`>`、`&`、`"`、`'`),后者用于输出会放进属性值的场景。
复制或下载结果
把实体编码后的文本复制到剪贴板,或下载为 .html 文件。编码器会保留输入里的所有空白 —— 可以再用解码器往返一次来验证。
常见问题
哪些字符应该被编码?
在 HTML 内容里,`<`、`>`、`&` 必须始终编码(它们带有标记含义)。在属性值里,还要额外编码 `"` 和 `'`,避免破坏引号配对。其它带有命名实体的字符(copyright、em-dash、智能引号)可以编码,也可以直接以原始 UTF-8 粘贴 —— 现代浏览器对两者都能正确渲染。
命名实体和数值实体有什么区别?
命名实体用的是助记符,例如 `&`、`©`;数值实体用的是码点的十进制(`&`)或十六进制(`&`)表示。两者解码到的是同一个字符。命名实体更易读,但条目只有大约 2,000 个;数值实体则覆盖了全部 Unicode 字符,包括 Emoji 和罕见文字。
编码器会对已经存在的实体再次编码吗?
会的 —— 编码器把输入一律当成纯文本。如果输入里已经包含 `&`,编码器会输出 `&amp;`。如果内容已经被部分编码,请先跑一遍解码器;如果你只想转义那几个有标记含义的字符,切换到 HTML-safe-only 模式即可。
输出能用在 CSS 或 JavaScript 中吗?
不能。CSS 用的是另一套转义语法(反斜杠后跟十六进制代码,如 `\26 `)。JavaScript 用 `\u0026`(十六进制)或 `\x26`(短十六进制)。HTML 实体只在 HTML 内容里有效。要放进 JS 或 CSS 上下文,请使用能输出对应语言转义的工具。
编码是可逆的吗?
是的 —— 解码器可以完整还原编码器的输出。任何输入先编码再解码,原始字符都会回来。唯一会丢失的情况是输入里出现了没有实体对应形式的字符(极其罕见 —— 几乎每个 Unicode 字符至少都有数值实体)。
限制说明
- 不检测双重编码编码器把输入一律视为纯文本。输入 `&` 会被编码为 `&amp;`,而 `&amp;` 解码回来是 `&`,并不是 `&`。如果你怀疑内容已经被编码过,请先跑一遍解码器。
- ASCII 字母不会被编码默认模式下,ASCII 字母和数字保持原样。把所有字符都编码会让输出难以阅读,并且不带来安全收益 —— 在多数 HTML 正文里,只需转义 `<`、`>`、`&`、`"`、`'` 这五个字符就够了。
- 不适用于 CSS 或 JavaScriptHTML 实体在 CSS 或 JavaScript 上下文里不生效。CSS 用的是 `\26 `(反斜杠 + 十六进制),JavaScript 用的是 `\u0026`。要为这两种上下文编码,需要换用别的工具或带语言感知的转义方式。
平台说明
- macOS
- TextEdit 保存时不会自动编码。当你要把文本粘贴到 HTML 字段里、而 `<` 和 `>` 会被当作标记解析并破坏渲染结果时,浏览器工具是更合适的选择。
- Windows
- 记事本和 VS Code 默认把 HTML 保存为原始 UTF-8。当目标是 HTML 属性值、或某个要求实体形式而非原始字符的 CMS 字段时,浏览器工具是更合适的选择。
- Linux
- 命令行下的等价方案是 `python3 -c 'import html; print(html.escape(s))'`。本浏览器工具更适合从聊天窗口、邮件或文档页面直接复制的文本 —— 这类内容再敲回 Python REPL 并不现实。
- Web
- 完全在客户端运行。页面加载后可离线使用。编码后的输出是可移植的 HTML —— 可以直接粘贴到任何网页、CMS 字段或 HTML 属性中,无需依赖目标端的编码处理。