HTML 实体编码器与解码器
转义文本,让它可以安全地放入 HTML 中;或者把 & 和 € 这样的实体还原为可读字符。
在浏览器中运行无需注册不上传任何数据
已编码
如何使用HTML 实体编码/解码
- 选择编码来转义文本,或选择解码把实体还原为字符。
- 编码时,选择要转义哪些字符:只转义 HTML 特殊字符,同时转义所有非 ASCII 字符,或者转义除字母和数字之外的所有字符。
- 选择命名实体(
é)、十进制(é)或十六进制(é)。 - 复制结果。解码时,未知的实体会被列出,方便你发现拼写错误。
为什么要转义 HTML?
有五个字符在 HTML 中具有特殊含义:& 是实体的开头,< 和 > 用于界定标签," 和 ' 用于结束属性值。如果包含这些字符的用户输入未经转义就插入页面,可能会破坏页面布局,更糟的是可能被注入脚本(跨站脚本攻击,XSS)。转义会把它们变成 &、<、>、" 和 ',浏览器会将其显示为文本。
命名实体、十进制实体和十六进制实体
每个 Unicode 字符都可以写成数字引用:€ 可写作十进制 € 或十六进制 €。许多常见字符还有可读的名称,如 €、© 或 。数字引用在任何地方都有效,包括只定义了五个命名实体的 XML。命名实体在源代码中更易读。
需要对非 ASCII 字符进行编码吗?
如果你的页面以 UTF-8 提供(几乎所有现代网站都是如此,<meta charset="utf-8">),就不需要。é、ü 或 日本 这样的字符可以直接书写。对它们进行编码适用于旧系统、电子邮件模板,或者处理流程会弄乱非 ASCII 文本的场景。
转义取决于上下文
HTML 实体转义保护的是放在元素内容和带引号属性中的文本。对于 <script> 块、内联事件处理器、CSS 或 URL 中的值,这还不够,它们各自需要专门的编码方式。优先使用框架自带的自动转义(React、Vue、Jinja、Blade),而不是手动拼接字符串。
常见问题
HTML 中哪些字符必须转义?
在文本内容中,
& 和 < 是必须转义的。在属性值中,还要转义你所使用的引号字符。把五个字符(& < > " ')全部转义是最稳妥的默认做法。&nbsp; 是什么?
不换行空格(U+00A0)。它看起来像普通空格,但会阻止换行,并且不会与相邻的空格合并。
为什么 &copy2024 会被解码为 ©2024?
出于向后兼容,浏览器会解码少数旧式实体,例如
©、& 和 <,即使末尾没有分号。本解码器遵循同样的规则。在你自己的 HTML 中请始终写上分号。撇号应该写成 &apos; 还是 &#39;?
' 在 HTML5 和 XML 中有效,但在 HTML 4 中无效,因此数字形式 ' 或 ' 兼容性最好,本编码器输出的也是这种形式。