HTML 实体的用途
HTML 会把某些字符当作标记,而不是字面文本。&(ampersand)开启字符引用;尖括号打开标签;引号界定属性。当这些字符需要作为内容出现时——博客文章、文档片段、用户评论——应将其编码为 HTML 实体(也称字符引用)。浏览器的 HTML 解析器在构建 DOM 时会把实体还原为预期字符。
实体可以是命名形式(&、<、")或数字形式(&、&)。命名形式在源码中更易读;数字形式可表达任意 Unicode 码点,即使没有广为人知的名称。编码是一种标记安全与互操作性技术。它不是加密,也不能替代应用安全框架中的上下文感知输出编码。
可用从文本到 HTML 实体编码示例短语,再用从 HTML 实体到文本还原。
两个子工具的关系
- 从文本到 HTML 实体 — 将特殊字符转换为适合嵌入标记的 HTML 安全实体引用。
- 从 HTML 实体到文本 — 将实体引用展开为普通字符,便于阅读或后续处理。
在准备教程示例、清理粘贴的 CMS 内容,或核对模板转义步骤是否符合预期时,可做往返转换。若解码后实体仍未被处理,可能是格式错误(如 & 缺少 ;),或不在解码器识别的集合内。
命名引用与数字引用
命名实体。 HTML 定义了大量名称( 、©、€ 等)。HTML 文本基本转义只需一小核心:&、<、>,以及常随属性上下文而定的 " / '。
十进制数字。 © 是版权符号。该数字即 Unicode 码点。
十六进制数字。 © 是同一版权符号。十六进制常见于规范与生成输出。
同一文档混用多种风格仍是合法 HTML,但团队常对手写内容统一用命名实体以保证可读性,对生成流水线则多用数字形式。
安全需看上下文
转义规则取决于字符串最终落在何处:
- HTML 文本节点 — 转义
<、>与&可防止意外标签注入。 - HTML 属性值 — 须按引号风格处理引号。
- HTML 内的 JavaScript 字符串字面量 — 仅靠 HTML 实体转义不够,需要 JS 感知编码。
- URL 查询组件 — 使用 percent-encoding,而非 HTML 实体。
应用框架提供上下文专用编码器是有原因的。通用的「文本 → 实体」工具很适合内容创作与调试;当数据进入脚本、事件处理程序或 CSS 时,它本身并不是完整的 XSS 防护。
常见正当用途
在 HTML 中发布代码示例。 要在页面上显示 <div>,必须编码尖括号,否则浏览器会把它们当作真实标签。
邮件与 CMS 内容。 编辑器有时会存储实体;解码有助于看到可读文本,便于迁移或搜索索引。
规范化复制粘贴。 文字处理软件与网站会插入 与弯引号实体;解码可弄清实际粘贴了什么。
本地化核对。 检查模板中 é 与 é 是否被一致处理。
实体、URL 编码与 Unicode 转义
| 机制 | 字母表 / 形式 | 典型场景 |
|---|---|---|
| HTML 实体 | &name; / &#…; | HTML/XML 文本 |
| Percent-encoding | %20、%2F | URL |
JSON \uXXXX | Unicode 转义 | JSON 字符串 |
| XML 预定义实体 | 较小命名集合 | XML |
选错层是常见错误:把 %20 放进 HTML 文本会原样显示 %20,而把 放进 URL 对期望 percent-encoding 的服务器是错误的。
限制
- 把每个字符都编成数字实体会使源码难读,且很少必要。
- 解码不会执行 HTML;它只在字符串中展开引用。
- 双重编码(
&lt;)是常见的 CMS 异味——请谨慎解码,在文本可读时停下,否则可能过度解码。 - 若政策要求,请将未发布的敏感内容保持离线。
小结
HTML 实体让对标记有特殊意义的字符能在 HTML 源码中安全传递。本中心将编码与解码转换器配对,用于创作、教学与清理。在安全敏感应用中请尊重输出上下文,手写内容优先用清晰的命名实体,且不要把 HTML 转义与 URL 或 JSON 转义混为一谈。