必须用实体编码的字符是、&、"、'这5个,否则浏览器会将其当作html语法解析,导致内容消失、标签错位或xss风险。

哪些字符必须用实体编码,否则会解析失败
直接写 、<code>>、&、"、' 这5个字符,浏览器会当成HTML语法解析,轻则内容消失,重则标签错位甚至XSS风险。比如 <p>5 </p> 实际只显示“5”,后面被截断;<a href="https://www.php.cn/link/f9a5447b601e2dc232d1480a4447dc5d">link</a> 中的 & 会让参数 b=2 被忽略。
和 <code>>:所有展示代码、数学表达式、XML片段时必须用/ <code>>-
&:URL参数、属性值、嵌套实体中都必须转义为&(注意不是&) -
":在双引号包裹的属性值里出现时,必须用",否则提前闭合属性 -
':单引号属性值中建议用',但老IE不支持,稳妥起见可改用双引号或'
中文排版空格失效?用对空白实体才能生效
普通空格键敲10次,HTML只当1个空格;换行和缩进也全被忽略。这不是bug,是HTML规范行为。要控制间距,必须用不可折叠的空白实体:
-
:不换行空格,适合数字与单位间(如¥199 元)、人名中间(张 三) -
:全角空格(≈2个英文字符宽),中文首行缩进可用(2个),比CSS更轻量 -
:半角空格(≈1个英文字符宽),中英文混排时微调间距,比如HTML CSS JS - 避免滥用
做布局——它本质是文本内容,不是样式控制手段,语义上不准确
UTF-8声明 + 实体编码,二者关系别搞反
UTF-8声明(<meta charset="utf-8">)解决的是文件字节如何解码成字符;实体编码解决的是字符如何安全落入HTML结构中。两者不互斥,但优先级不同:
- 如果文件本身是UTF-8编码,又写了
©,浏览器先按UTF-8读出 © 字符,再按实体规则解析——结果正确,但多此一举 - 如果文件是GBK编码却声明UTF-8,即使用了
©,© 可能仍乱码,因为底层字节已错 - 真正需要实体的场景:动态插入内容(如JS innerHTML)、用户输入未过滤字段、兼容老旧系统(如Windows-1252环境)
- 现代项目中,纯中文内容优先存为UTF-8 + 直接写汉字;仅在必须隔离HTML语法时才加实体
emoji和生僻字显示异常?数字实体更可靠
命名实体(如 ©)只覆盖常用符号,而 😊(?)这类Unicode码点能表示任意字符。但要注意:
- 十六进制写法需加前缀
x:😊(?),十进制写法不用:😊 - 部分旧Android WebView不支持4字节UTF-8字符(即U+10000以上),此时用代理对(surrogate pair)实体也不行,只能降级为图片或SVG
- 生僻汉字如「?」(U+30000)在多数字体里无glyph,实体编码能正确传输,但最终是否显示取决于字体支持,不是编码问题
- 服务端输出JSON时若含实体,前端JS解析后需手动
textarea.innerHTML = str才触发实体解码,textContent不会解码
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











