code标签内未转义、&会崩,因html解析器将其视为语法锚点:

code 标签里写 、& 为什么直接崩
因为 、<code>>、& 这三个字符在 HTML 解析器眼里是“语法锚点”,哪怕它们出现在 <code> 标签内部,浏览器仍会先按 HTML 规则切分—— 会被当成标签起始,<code>& 会被当成实体开头。不转义就等于主动交出解析控制权。
常见错误现象:<div> 渲染成空白、<code>price & stock 变成 price 后截断、href="a.html?x=1&y=2" 里 & 漏转导致 y 参数丢失。
- 必须转义的只有五个:、&、"、'
-
&必须第一个转——否则©会被当普通文本,因缺少合法开头 - 命名实体(如
)比数字实体(如 <code>)更易读,优先用
双引号属性值里嵌 标签怎么不出错
问题不在 标签本身,而在外层属性值的引号边界被提前闭合。比如 <code><p title="User said " hello><code>console.log("Hi")
",title 属性会在第一个 " 就结束,后面内容变成非法 HTML。
- 双引号属性值中,所有
"必须写成" - 单引号属性值中,
'建议统一写成'(IE8+ 支持,'兼容性更稳) - 避免混用:不要
title='He said "Hi"'里只转外层而漏内层,风险一样高
动态插入 code 内容时,JS 怎么安全转义
用字符串拼接往 innerHTML 塞内容是最容易翻车的场景——el.innerHTML = '<code>' + userCode + '' 完全不处理转义,XSS 和结构错乱一并到来。
- 别手动拼
和 <code>&,用 DOM 方法最稳:el.textContent = userCode,再套code标签 - 若必须用
innerHTML,先过一遍转义函数:userCode.replace(/&/g, '&').replace(/, '/g, '>').replace(/"/g, '"').replace(/'/g, ''') -
element.setAttribute('data-code', str)会自动处理引号,但不会转或 <code>&,仍需手动补
code 标签里显示下划线 _ 或数学符号 ∑ 怎么办
_ 不是 HTML 特殊字符,直接写就行;∑ 是 Unicode 字符,在 UTF-8 页面中可直输,但兼容性不如实体。真正要小心的是渲染干扰,不是转义需求。
-
_消失?大概率是 CSS 的text-decoration、line-height或字体连字(ligatures)导致,不是 HTML 解析问题 - 数学符号如
∑、α、→推荐用数字实体:∑、α、→,命名实体支持有限且易拼错 - 别用
_(那是上划线),也别用_(它和键盘 _ 完全等价,纯属冗余)
最常被忽略的一点:转义不是目的,控制解析上下文才是。同一个字符,在 <script></script> 里不用转,在 <code> 里必须转,在属性值里还要叠加引号处理——漏掉任意一层上下文,前面所有转义都白做。











