HTML中未转义的、&会被浏览器解析为标签,导致内容消失或报错;必须转义为、&,再用包裹短代码,禁用嵌套块级元素。

为什么里的会消失或报错
浏览器解析 HTML 时,遇到未转义的 或 <code>>,会尝试当作标签开始/结束符处理。哪怕它们在
标签内部,只要没被转义,就可能被截断、渲染异常,甚至破坏整个页面结构。
- 错误写法:
<div>content</div> 实际要展示的是 HTML 标签,但写成 <code><div>content</div>就会被解析成真实 DOM 节点 - 所有出现在
文本内容中的 <code>、<code>>、&都必须手动转义为、<code>>、& - 别指望 CSS 的
white-space或 JS 的textContent能补救——HTML 解析阶段就已出错,样式和脚本都来不及介入
什么时候必须用 而不是 <pre class="brush:php;toolbar:false;">
是唯一适合嵌入普通段落的语义化代码标签。它默认是行内元素,不换行、不保留缩进,和周围文字自然对齐。
- 典型场景:
fetch()、<code>os.path.join()、git commit -m "init"这类短命令或函数名 - 如果强行用
替代,会在段落中插入块级容器,导致布局错位、行高突变、CSS 难以统一控制
不处理空格与换行,所以它天然排斥多行内容;这不是缺陷,而是设计意图
如何安全展示含 HTML 标签的代码片段
要展示一段本身含 和 <code>> 的代码(比如 HTML 模板、JSX、PHP),必须两级处理:先转义,再包裹。
- 转义不可跳过:把原始字符串中的
全部替换成 <code>,<code>>→>,&→& - 再套
<code>:如<button onclick="alert(1)">Click</button> - 服务端生成时,优先用
htmlentities($str, ENT_QUOTES, 'UTF-8')(PHP)或DOMPurify.sanitize()(JS)做预处理,避免漏转
常见误用: 嵌套 <pre class="brush:php;toolbar:false;"> 或其他块级标签
是严格行内容器,HTML 规范禁止在里面放 <code><div>、<code><p></p>、<pre class="brush:php;toolbar:false;"></pre> 等块级元素。浏览器会自动闭合
,导致结构断裂。
- 错误:
<pre class="brush:php;toolbar:false;">console.log("x");</pre> —— 浏览器实际解析为 <code>console.log("x");,前面的被提前关闭
- 正确组合永远是
<pre class="brush:php;toolbar:false;">...</pre>,<pre class="brush:php;toolbar:false;"> 必须作为 <pre class="brush:php;toolbar:false;"> 的直接子元素</pre></pre> - 若想给
加背景或边框,只对 <pre class="brush:php;toolbar:false;"> 设 display: block</pre> 会破坏其行内语义,影响屏幕阅读器识别
<img>,少转一个 ,就可能让整段说明文字从页面上消失。











