HTML编码器
编码和解码HTML实体
如何使用HTML编码器
- 1粘贴需要转义的 HTML 文本(含 < > & 等字符)。
- 2选择编码(转义特殊字符)或解码(还原)。
- 3复制结果用于网页代码、表单值或文档展示。
HTML 转义是什么?为什么需要
常用映射:& → & < → < > → > " → " ' → 'HTML 转义把具有语法含义的字符换成实体引用,避免浏览器把它们误当成标签或属性。例如把 < 写成 <,页面才会原样显示小于号。
在把用户输入回显到页面时,正确转义能防止 XSS(跨站脚本)攻击——这是 Web 安全的基本功。服务端框架多会自动转义,手动拼接 HTML 时尤其要小心。
本工具双向支持编码/解码,适合检查一段文本在网页里到底会渲染成什么,或还原别人转义过的内容。
HTML 编码的目的是**把字符变成「字面量」而非「标记」**。用户输入 `<script>` 若直接输出到页面,浏览器会当成标签执行;编码成 `<script>` 后,浏览器只显示为文本。这就是防御 XSS(跨站脚本攻击)的第一道防线。
**但只编码 < > & 是不够的**,要看输出位置:① HTML 文本节点:编码 < 和 &;② HTML 属性值:必须编码引号(否则可闭合属性注入事件);③ JavaScript 代码块:HTML 编码无效,需做 JS 字符串转义(' \ \n 及 </script>);④ URL:需 URL 编码。**最稳妥的做法是使用框架自带的自动转义**(React 的 {}、Vue 的 {{}} 默认转义),只有明确需要输出 HTML 时才用 dangerouslySetInnerHTML / v-html,且必须先做白名单过滤。
| 字符 | 实体名 | 实体编号 | 何时必须编码 |
|---|---|---|---|
| < | < | < | 任何用户输入回显 |
| > | > | > | 任何用户输入回显 |
| & | & | & | 始终(包括已编码串) |
| " | " | " | 属性值用双引号包裹时 |
| ' | ' | ' | 属性值用单引号包裹时 |
| 空格 | |   | 需要保留连续空格 |
| © | © | © | 可选(UTF-8 下可直写) |
| ¥ | ¥ | ¥ | 可选 |
HTML 实体编码对照
常见问题
转义和加密是一回事吗?
不是。转义只是『让字符失去语法含义』的文本处理,任何人都能解码还原;它不保密,也不能替代加密。
什么时候必须转义?
凡是把数据插入 HTML、属性、URL 或 JS 上下文时。最危险的是把用户输入直接拼进页面,必须用对应上下文的转义。
为什么解码后和原文本不一样?
若原文本身含实体(如已转义的 &),解码会还原成 &。这是预期行为;反复编解码要留意幂等性。
为什么 & 要最先编码?
因为编码结果本身含有 &(如 <)。如果先编码 < 得到 <,再编码 & 就会变成 &lt;,浏览器显示为 < 而非 <,出现「双重编码」的显示错误。正确顺序是先编 & 再编其他字符。同理,解码时顺序相反。这是手写编码器最常见的 bug。
UTF-8 页面还需要实体编码吗?
对于显示目的(如 © ¥ é 中文)不需要,直接写字符即可,更简洁也便于搜索。但对于**安全目的**(< > & 引号)必须编码,无论什么编码格式。简单判断:这些字符是否会被浏览器当作语法解析?会,就需要编码。现代做法是在输出层统一转义,而不是在存储层转义——存储原始数据,输出时按上下文转义,这样数据可用于多种场景且不会累积编码错误。
