HTML 实体
编码和解码 HTML 特殊字符和实体
使用场景
- 安全转义用户内容——把 `<script>` 转成 `<script>` 再塞进模板。
- 读原始 HTML 邮件源码——把 `&` 和 `☃` 解码看收件人实际看到什么。
- 生成 CMS 安全片段——把 `'` 和 `"` 编码以免数据库列破坏 SQL 或 HTML 上下文。
- 排查 XSS 报告——把可疑输入反转义还原成安全工具标记的原始 payload。
何时需要 HTML 实体编码?
当用户提供的文本被渲染为 HTML 时,像 `<` 和 `>` 这样的字符必须转义为 `<` 和 `>`,以避免被解释为标签。跳过此步骤是 XSS 漏洞的根本原因。该工具编码五个核心的 HTML 不安全字符以及您选择转义的任何 Unicode。
数字实体 (`&`, `&`) 在任何 HTML 上下文中都有效。命名实体 (`&`, `©`) 更易于阅读,但仅在 HTML 中有效 — XML 解析器不知道所有 HTML 名称。
示例
| 输入 | 结果 |
|---|---|
| <script>alert('hi')</script> | <script>alert('hi')</script> |
| © 2024 — Wenee | © 2024 — Wenee |
常见问题
哪些字符需要编码?
至少:`<`, `>`, `&`, `"`, 和 `'`。编码更多(如所有非 ASCII)是无害的,但会增加输出大小。
命名实体还是数字实体更好?
命名 (`&`) 在 HTML 中更易读;数字 (`&`) 在 HTML 和 XML 中都有效。选择数字以确保跨格式安全。
HTML 实体编码与 URL 编码相同吗?
不 — HTML 实体在 HTML 上下文中使用 `&...;` 语法。URL 编码在 URL 上下文中使用 `%XX`。它们服务于不同的层次。
这能防止 XSS 吗?
在 HTML 输出中编码文本内容可以防止最常见的 XSS 向量。其他上下文(属性值、JavaScript 字符串、CSS)需要自己的转义规则。
我的文本会被发送到哪里吗?
不会。编码和解码完全在您的浏览器中进行。
