HTML 实体编码器与解码器

转义文本,让它可以安全地放入 HTML 中;或者把 & 和 € 这样的实体还原为可读字符。

在浏览器中运行无需注册不上传任何数据

已编码

如何使用HTML 实体编码/解码

  1. 选择编码来转义文本,或选择解码把实体还原为字符。
  2. 编码时,选择要转义哪些字符:只转义 HTML 特殊字符,同时转义所有非 ASCII 字符,或者转义除字母和数字之外的所有字符。
  3. 选择命名实体(é)、十进制(é)或十六进制(é)。
  4. 复制结果。解码时,未知的实体会被列出,方便你发现拼写错误。

为什么要转义 HTML?

有五个字符在 HTML 中具有特殊含义:& 是实体的开头,< 和 > 用于界定标签," 和 ' 用于结束属性值。如果包含这些字符的用户输入未经转义就插入页面,可能会破坏页面布局,更糟的是可能被注入脚本(跨站脚本攻击,XSS)。转义会把它们变成 &amp;、&lt;、&gt;、&quot; 和 &#x27;,浏览器会将其显示为文本。

命名实体、十进制实体和十六进制实体

每个 Unicode 字符都可以写成数字引用:€ 可写作十进制 &#8364; 或十六进制 &#x20AC;。许多常见字符还有可读的名称,如 &euro;、&copy; 或 &nbsp;。数字引用在任何地方都有效,包括只定义了五个命名实体的 XML。命名实体在源代码中更易读。

需要对非 ASCII 字符进行编码吗?

如果你的页面以 UTF-8 提供(几乎所有现代网站都是如此,<meta charset="utf-8">),就不需要。é、ü 或 日本 这样的字符可以直接书写。对它们进行编码适用于旧系统、电子邮件模板,或者处理流程会弄乱非 ASCII 文本的场景。

转义取决于上下文

HTML 实体转义保护的是放在元素内容和带引号属性中的文本。对于 <script> 块、内联事件处理器、CSS 或 URL 中的值,这还不够,它们各自需要专门的编码方式。优先使用框架自带的自动转义(React、Vue、Jinja、Blade),而不是手动拼接字符串。

常见问题

HTML 中哪些字符必须转义?
在文本内容中,& 和 < 是必须转义的。在属性值中,还要转义你所使用的引号字符。把五个字符(& < > " ')全部转义是最稳妥的默认做法。
&amp;nbsp; 是什么?
不换行空格(U+00A0)。它看起来像普通空格,但会阻止换行,并且不会与相邻的空格合并。
为什么 &amp;copy2024 会被解码为 ©2024?
出于向后兼容,浏览器会解码少数旧式实体,例如 &copy、&amp 和 &lt,即使末尾没有分号。本解码器遵循同样的规则。在你自己的 HTML 中请始终写上分号。
撇号应该写成 &amp;apos; 还是 &amp;#39;?
&apos; 在 HTML5 和 XML 中有效,但在 HTML 4 中无效,因此数字形式 &#39; 或 &#x27; 兼容性最好,本编码器输出的也是这种形式。

相关工具