HTML 实体编码/解码器
免费在线HTML实体编码解码器,特殊字符转义与反转义,支持批量处理多行文本,防止XSS注入,纯前端本地计算。
⇄
Ad Space
HTML 实体编码基础
HTML 实体(HTML Entity)是 HTML 中表示特殊字符的一种方式。由于 HTML 使用 < 和 > 来定义标签,使用 & 来表示实体本身,这些字符不能直接出现在内容中,必须通过实体来表示。
五种核心实体
以下五个字符是最基本的 HTML 实体,也是防止 XSS 攻击必须转义的字符:
&→ & (和号)<→ < (小于号)>→ > (大于号)"→ " (双引号)'→ ' (单引号)
常见命名实体
HTML 定义了超过 2000 个命名实体,常用的有:
- 空格类: (不间断空格)、 (半角空格)、 (全角空格)
- 符号类:©(©版权)、®(®注册商标)、™(™商标)
- 货币类:€(€欧元)、£(£英镑)、¥(¥日元)
- 数学类:±(±)、×(×)、÷(÷)、∞(∞)
- 箭头类:←(←)、→(→)、↑(↑)、↓(↓)
数字实体
数字实体使用字符的 Unicode 编码点来表示,格式为 &#十进制编码; 或 &#x十六进制编码;。例如:
A→ A(十进制)A→ A(十六进制)中→ 中中→ 中
数字实体的优势是支持所有 Unicode 字符,而命名实体只覆盖有限的常用字符。
XSS 防护最佳实践
- 所有用户输入输出到 HTML 前必须进行 HTML 实体编码
- 不同上下文使用不同的编码方式:HTML 内容、HTML 属性、JavaScript、CSS、URL 各有专门的编码函数
- 使用模板引擎的自动转义功能,不要手动拼接 HTML
- 设置 Content-Security-Policy 响应头,限制脚本执行
- 对于富文本内容,使用白名单过滤而不是黑名单
注意事项
- HTML 实体编码是大小写敏感的:< 不是有效的实体
- 数字实体可以是十进制或十六进制,但命名实体只能用标准名称
- 在
<script>和<style>标签中,HTML 实体不会被解析 - 不要对已经编码过的字符串再次编码,否则会出现双重编码问题(如 &lt;)
常见问题
HTML 实体编码是什么? ▼
HTML 实体编码是将 HTML 中具有特殊含义的字符(如 < > & " 等)转换为实体名称(如 < > &)或数字实体(&#xxx;)的过程。这是为了防止浏览器将这些字符误解为 HTML 标签或属性。
为什么需要 HTML 转义? ▼
主要有两个原因:1) 防止 XSS(跨站脚本攻击):如果用户输入的内容包含恶意脚本,不转义直接输出到 HTML 中会导致脚本执行;2) 正确显示特殊字符:比如要在页面上显示 < 符号,就必须写成 <,否则浏览器会认为是标签开始。
基础编码和全部编码有什么区别? ▼
基础编码只编码 5 个关键字符(< > & " '),这是防止 XSS 的最低要求,也是最常用的模式。全部编码会将所有非 ASCII 字符都转为数字实体,适用于需要在纯 ASCII 环境中显示 Unicode 字符的场景。
命名实体和数字实体有什么区别? ▼
命名实体使用有意义的名称,如 © 表示版权符号 ©,可读性更好。数字实体使用字符的 Unicode 编码点,如 ©,支持所有 Unicode 字符。HTML5 定义了超过 2000 个命名实体。
如何防止 XSS 攻击? ▼
对所有用户输入进行 HTML 实体编码是防御 XSS 的基本手段。但要注意:不同的上下文需要不同的编码方式——HTML 内容用 HTML 实体编码,HTML 属性用属性编码,JavaScript 代码用 JavaScript 编码,CSS 用 CSS 编码。不要只用一种编码应对所有场景。