什么是 HTML 实体编码
在 HTML 页面中,< 和 > 被用来包裹标签。如果你想在页面上显示这些符号本身——比如写一篇讲 HTML 的教程、展示代码示例、或渲染用户输入的文本——就需要把它们"转义"成HTML 实体(HTML Entity):
// 你希望页面上显示的文本:
<script>alert("XSS")</script>
// 如果直接放到 HTML 源码中:
<script>alert("XSS")</script> ← 会被浏览器当作脚本执行!
// HTML 实体编码后(安全显示):
<script>alert("XSS")</script>
实体编码有两种形式:命名实体(如 < 代表 <)和数字实体(如 < 十进制或 < 十六进制,都代表 <)。
在线 HTML 实体编解码步骤
- 打开 HTML 实体编码工具。
- 粘贴需要转义的 HTML 代码或文本,点击「编码」,所有特殊字符被替换为实体。
- 反之,粘贴含
<&的文本,点击「解码」还原。 - 点击「复制」将转义后的安全文本嵌入 HTML 页面中使用。
核心功能一览
特殊字符编码
自动识别并转义 <、>、&、"、' 等 HTML 关键字符。
命名实体支持
常用字符输出为命名实体(<),其他字符输出为数字实体(&#XXXX;)。
解码还原
将实体编码后的文本还原为原始 HTML 或普通文本。
纯本地运行
浏览器本地字符替换,不上传数据。
常用 HTML 实体速查
| 字符 | 命名实体 | 数字实体 | 说明 |
|---|---|---|---|
| < | < | < | 小于号 / 左尖括号 |
| > | > | > | 大于号 / 右尖括号 |
| & | & | & | & 符号本身 |
| " | " | " | 双引号 |
| ' | ' | ' | 单引号 |
| |   | 不换行空格 | |
| © | © | © | 版权符号 |
常见应用场景
- 写技术博客:在文章中展示 HTML/JS 代码示例,必须实体编码才能正确显示。
- XSS 防护:用户提交的评论、昵称等内容在渲染到页面时,必须做实体编码防止注入攻击。
- 邮件 HTML 模板:邮件中的特殊字符编码后确保在各邮件客户端中正确渲染。
- RSS/XML 输出:XML 文档中 <、& 等字符必须实体编码,否则 XML 解析失败。
常见问题 FAQ
HTML 实体编码和 URL 编码有什么区别?
HTML 实体编码用于 HTML 文档中安全显示特殊字符(< 表示 <),防止浏览器解析为标签。URL 编码(百分号编码)用于 URL 中传输非 ASCII 字符。两者格式和用途完全不同——把 URL 编码的串放在 HTML 属性中时,可能需要同时做两层编码。
HTML 实体编码能防止 XSS 攻击吗?
能防一部分——在 HTML body 上下文中输出用户内容时做实体编码,可阻止攻击者注入 <script> 标签。但实体编码不是银弹:如果用户输入被放入 <script> 标签内、事件处理器(onclick/onerror)中、或 href/src 属性里,仅靠实体编码不够,需要配合严格的 CSP 和输入验证。
© ♥ 这些是什么?
这些是 HTML 命名实体——用助记名代替难以输入或显示的特殊字符: 是不换行空格(non-breaking space)、© 是 ©、♥ 是 ♥。命名实体比数字实体更易读,但只覆盖了 HTML 预定义的约 2000 个字符。
在线 HTML 实体编解码工具安全吗?
速工具 的 HTML 实体编码完全在浏览器本地运行,输入内容不会被上传。但出于安全最佳实践,不建议将真实的用户敏感数据或完整数据库导出粘贴到在线工具中——即使工具本身不传数据,浏览器环境中可能有其他活跃脚本。