必须转义的字符是<、>、&、"、'五个:前两个防标签解析错误,&防实体截断,后两个分别在双/单引号属性值中防边界冲突;其余字符如©、®、中文等无需HTML转义,但需确保UTF-8编码。

哪些字符必须用 HTML 实体转义?
不是所有符号都要转,只在 HTML 解析上下文中“有歧义”的才需要。比如 、<code>>、& 这三个是铁定要转的——浏览器一见到裸的 就开始找匹配的 <code>>,中间内容可能被当标签解析甚至丢弃;& 不转,后面跟着 copy; 就会变成乱码或直接不显示,因为浏览器以为你在写一个没闭合的实体。
其他常见必须转的场景:
-
"出现在双引号包围的属性值里(如title="He said "Hello""→ 必须写成title="He said "Hello"") -
'出现在单引号包围的属性值里(稳妥起见统一用'或数字形式',IE 对'支持差) -
©、®、€等符号虽无语法冲突,但若后端未声明 UTF-8 或旧环境不支持 Unicode,直接写可能显示为方块或问号
命名实体 vs 数字实体:怎么选?
命名实体(如 <、©)可读性强,适合常用符号;数字实体(如 、<code>© 或 ©)兼容性更稳,尤其对冷门符号或跨平台渲染更可靠。
实际建议:
立即学习“前端免费学习笔记(深入)”;
- 优先用命名实体:
<、>、&、"、©、®、€—— 浏览器支持成熟,代码一眼可懂 - 遇到数学符号(如
∑)、希腊字母(如α)或箭头(如→),查表用十进制∑或十六进制→,避免依赖命名别名 - 不要混用:比如写
<div>>,前半用数字、后半用命名,虽然能运行,但维护时容易漏掉分号或拼错名</div>>
在 JavaScript 或属性值里怎么处理?
HTML 实体只在 HTML 文本节点和属性值中生效;<script></script> 或 <style></style> 块内不走 HTML 解析流程,所以 < 在 JS 字符串里就是普通文本,不会被转义——但如果你用 innerHTML 动态插入含 < 的字符串,那它又进入 HTML 解析上下文了,必须确保已转义。
典型陷阱:
element.innerHTML = "5 → 渲染失败,应写成 <code>element.innerHTML = "5 < 10";-
document.write("Price: €29.99");→€在部分老环境不识别,改用€更保险 - 用
textContent替代innerHTML可彻底避开实体问题,因为它是纯文本赋值,不触发 HTML 解析
为什么有时写了实体还是显示不对?
最常见原因是编码声明缺失或错误。即使你用了 ©,如果页面没声明 <meta charset="UTF-8">,浏览器可能按 ISO-8859-1 解析,导致实体解码失败或乱码。
另外几个隐蔽点:
- 实体必须以
;结尾:<是无效的,浏览器会忽略整段或报错;<才正确 -
&必须第一个转义:写©会失败,因为&没转义,浏览器以为这是个新实体起点,但copy;并非合法名 - 服务端输出时若已做了一次 HTML 转义(如 PHP 的
htmlspecialchars()),前端再手动加实体会导致双重转义,例如最终显示为 <code><
真正难的不是记住几个实体,而是判断「当前上下文是否处于 HTML 解析路径中」——从模板渲染、JS 插入、服务端输出到 HTTP 响应头,每个环节都可能悄悄改变字符的解析状态。



















