HTML编码器

编码和解码HTML实体

如何使用HTML编码器

  1. 1粘贴需要转义的 HTML 文本(含 < > & 等字符)。
  2. 2选择编码(转义特殊字符)或解码(还原)。
  3. 3复制结果用于网页代码、表单值或文档展示。

HTML 转义是什么?为什么需要

常用映射:& → &amp; < → &lt; > → &gt; " → &quot; ' → &#39;

HTML 转义把具有语法含义的字符换成实体引用,避免浏览器把它们误当成标签或属性。例如把 < 写成 &lt;,页面才会原样显示小于号。

在把用户输入回显到页面时,正确转义能防止 XSS(跨站脚本)攻击——这是 Web 安全的基本功。服务端框架多会自动转义,手动拼接 HTML 时尤其要小心。

本工具双向支持编码/解码,适合检查一段文本在网页里到底会渲染成什么,或还原别人转义过的内容。

HTML 编码的目的是**把字符变成「字面量」而非「标记」**。用户输入 `<script>` 若直接输出到页面,浏览器会当成标签执行;编码成 `&lt;script&gt;` 后,浏览器只显示为文本。这就是防御 XSS(跨站脚本攻击)的第一道防线。

**但只编码 < > & 是不够的**,要看输出位置:① HTML 文本节点:编码 < 和 &;② HTML 属性值:必须编码引号(否则可闭合属性注入事件);③ JavaScript 代码块:HTML 编码无效,需做 JS 字符串转义(' \ \n 及 </script>);④ URL:需 URL 编码。**最稳妥的做法是使用框架自带的自动转义**(React 的 {}、Vue 的 {{}} 默认转义),只有明确需要输出 HTML 时才用 dangerouslySetInnerHTML / v-html,且必须先做白名单过滤。

字符实体名实体编号何时必须编码
<&lt;&#60;任何用户输入回显
>&gt;&#62;任何用户输入回显
&&amp;&#38;始终(包括已编码串)
"&quot;&#34;属性值用双引号包裹时
'&#39;&#39;属性值用单引号包裹时
空格&nbsp;&#160;需要保留连续空格
©&copy;&#169;可选(UTF-8 下可直写)
¥&yen;&#165;可选

HTML 实体编码对照

常见问题

转义和加密是一回事吗?

不是。转义只是『让字符失去语法含义』的文本处理,任何人都能解码还原;它不保密,也不能替代加密。

什么时候必须转义?

凡是把数据插入 HTML、属性、URL 或 JS 上下文时。最危险的是把用户输入直接拼进页面,必须用对应上下文的转义。

为什么解码后和原文本不一样?

若原文本身含实体(如已转义的 &amp;),解码会还原成 &。这是预期行为;反复编解码要留意幂等性。

为什么 & 要最先编码?

因为编码结果本身含有 &(如 &lt;)。如果先编码 < 得到 &lt;,再编码 & 就会变成 &amp;lt;,浏览器显示为 &lt; 而非 <,出现「双重编码」的显示错误。正确顺序是先编 & 再编其他字符。同理,解码时顺序相反。这是手写编码器最常见的 bug。

UTF-8 页面还需要实体编码吗?

对于显示目的(如 © ¥ é 中文)不需要,直接写字符即可,更简洁也便于搜索。但对于**安全目的**(< > & 引号)必须编码,无论什么编码格式。简单判断:这些字符是否会被浏览器当作语法解析?会,就需要编码。现代做法是在输出层统一转义,而不是在存储层转义——存储原始数据,输出时按上下文转义,这样数据可用于多种场景且不会累积编码错误。

更多工具