HTML 实体

编码和解码 HTML 特殊字符和实体

使用场景

  • 安全转义用户内容——把 `<script>` 转成 `&lt;script&gt;` 再塞进模板。
  • 读原始 HTML 邮件源码——把 `&amp;` 和 `&#x2603;` 解码看收件人实际看到什么。
  • 生成 CMS 安全片段——把 `'` 和 `"` 编码以免数据库列破坏 SQL 或 HTML 上下文。
  • 排查 XSS 报告——把可疑输入反转义还原成安全工具标记的原始 payload。

何时需要 HTML 实体编码?

当用户提供的文本被渲染为 HTML 时,像 `<` 和 `>` 这样的字符必须转义为 `&lt;` 和 `&gt;`,以避免被解释为标签。跳过此步骤是 XSS 漏洞的根本原因。该工具编码五个核心的 HTML 不安全字符以及您选择转义的任何 Unicode。

数字实体 (`&#38;`, `&#x26;`) 在任何 HTML 上下文中都有效。命名实体 (`&amp;`, `&copy;`) 更易于阅读,但仅在 HTML 中有效 — XML 解析器不知道所有 HTML 名称。

示例

输入结果
<script>alert('hi')</script>&lt;script&gt;alert(&#39;hi&#39;)&lt;/script&gt;
© 2024 — Wenee&copy; 2024 &mdash; Wenee

常见问题

哪些字符需要编码?

至少:`<`, `>`, `&`, `"`, 和 `'`。编码更多(如所有非 ASCII)是无害的,但会增加输出大小。

命名实体还是数字实体更好?

命名 (`&amp;`) 在 HTML 中更易读;数字 (`&#38;`) 在 HTML 和 XML 中都有效。选择数字以确保跨格式安全。

HTML 实体编码与 URL 编码相同吗?

不 — HTML 实体在 HTML 上下文中使用 `&...;` 语法。URL 编码在 URL 上下文中使用 `%XX`。它们服务于不同的层次。

这能防止 XSS 吗?

在 HTML 输出中编码文本内容可以防止最常见的 XSS 向量。其他上下文(属性值、JavaScript 字符串、CSS)需要自己的转义规则。

我的文本会被发送到哪里吗?

不会。编码和解码完全在您的浏览器中进行。