直接写是为提升表达效率与思维敏捷性,避免过度构思导致的拖延,通过即时输出锻炼逻辑组织能力与语言精准度。

为什么直接写
浏览器解析 HTML 时, 和 <code>& 是语法锚点: 启动标签、<code>& 启动实体引用。如果你在文本中直接写 3 或 <code>price & tax,浏览器可能把前者截断为“3 ”,后者卡在未闭合的实体里,导致后续内容不渲染或结构塌陷。
更严重的是 XSS 风险:用户输入的 <script>alert(1)</script> 若未经转义就插入页面,会直接执行。
- 常见错误现象:段落突然截断、按钮文字消失、控制台报
Unclosed entity错误 - 不是所有符号都危险,但只要出现在 HTML 文本上下文中(非属性值或 JS 字符串),
、<code>>、&、"、'就必须处理 - 空格和换行也受影响:连续空格被合并,换行被忽略,需用
或控制
命名实体 vs 数字实体:选哪个更稳妥
命名实体如 <、© 可读性强,但支持度有历史包袱;数字实体如 、<code>© 兼容性更好,且能覆盖所有 Unicode 字符。
-
<和效果一致,但 IE6–8 对 <code>'不识别,必须用' - 中文、emoji 等无命名实体的字符,只能靠数字形式,例如 ❤️ 是
❤️(注意:这是两个码点) - 十六进制写法如
(<code>)也合法,但部分老旧 XML 解析器不支持,生产环境优先用十进制 - 现代项目若已声明
<meta charset="utf-8">,且不需支持 IE,可直接写 Unicode 字符(如 ©),但动态内容仍建议服务端转义
在 JavaScript 中插入特殊符号要绕开 innerHTML
用 innerHTML 拼接未转义字符串等于主动引入 XSS 漏洞。即使你手动写了 <,一旦变量值含 &,就可能触发二次解析。
- 安全做法是用
textContent:它把内容当纯文本,自动规避所有解析逻辑 - 若必须用 HTML 结构,先对变量做转义再拼接,例如:
function escapeHtml(str) {<br> return str<br> .replace(/&/g, '&')<br> .replace(/</g, '<')<br> .replace(/>/g, '>')<br> .replace(/"/g, '"')<br> .replace(/'/g, ''');<br>} - 框架如 React 默认使用
textContent语义,Vue 的v-text同理;只有显式用v-html或dangerouslySetInnerHTML才需自行转义
容易被忽略的排版类实体:空格、破折号、引号
普通空格和回车在 HTML 中不保留,而中文排版对空格、连接符、引号有严格要求,这些必须用对应实体才能精准控制。
-
是不换行空格,适合“第 1 章”这类防折行场景 -
( )、( )、( )分别对应细、中、宽空格,用于数学公式或对齐 - 短破折号 – 是
–,长破折号 — 是—,别混淆成连字符- - 中文引号“”应使用
“/”,英文直角引号 " 则用";单引号同理:‘和’ - 这些实体在 CSS 中无法通过
white-space: pre替代——后者只保留空白,不解决语义和字体渲染问题
<,而是忘了对动态数据做转义,或者在 JS 模板字符串里混用 innerHTML 和原始变量。字符实体本身很简单,难的是把它变成条件反射式的编码习惯。


















