论坛中函数名等须用包裹以保留语义和样式;多行代码必须用结构;html字符需转义;discuz等系统中仅用于渲染层,不参与bbcode解析;嵌套回复需独立节点。

论坛发帖里写函数名或命令,必须用 包裹
用户在帖子中提 fetch()、<code>console.log() 或配置项 max_connections,这些都属于行内代码片段。直接写成纯文本,语义丢失,屏幕阅读器读作普通单词,CSS 也没法统一加等宽字体和背景色。
- 正确:
调用 <code>fetch()前请检查AbortSignal是否已 abort - 错误:
调用 fetch() 前请检查 AbortSignal 是否已 abort(无语义,无法样式隔离) - 别给
加 <code>white-space: pre:它会让长命令(如git log --oneline --graph --all --simplify-by-decoration)横向撑破容器,且基线对不齐
用户贴多行代码时, 是唯一合法结构
Discuz、PHPWind 或自研论坛里,用户粘贴一段 Python 脚本或 Nginx 配置,如果只用
,缩进全丢、换行塌成一行;如果只用 <pre class="brush:php;toolbar:false;">,搜索引擎当普通文本索引,高亮库(如 Prism.js)也识别不了语言。
- 正确:
<code>if (status === 200) {<br> console.log('OK');<br>}</code> - 错误:
if (status === 200) { console.log('OK'); }(单行、无缩进) - 错误:
if (status === 200) {<br> console.log('OK');<br>}(无,语义缺失,高亮失效)
- 必须手动转义 HTML 字符:
<div class="container">,否则浏览器解析为真实标签,后续 DOM 错乱 <h3>Discuz 类系统中,<pre class="brush:php;toolbar:false;"> 标签不能替代 BBCode 渲染逻辑</pre> </h3> <p>Discuz 存储的是 BBCode(如 <code>[b]加粗[/b]),不是 HTML。用户在编辑器里看到的 <code><strong>加粗</strong>是前端渲染结果,提交前需经html2bbcode()转换。此时标签只用于前端展示层,和存储/提交流程无关。
- 后端入库前,
标签内容不会被自动转换——它只是静态标记,不参与解析 - 若在模板里直接输出用户原始输入(未过滤+未 BBCode 解析),
标签会被当作文本原样显示,变成可见的 <code><code>fetch() - 安全前提下,
只应在服务端完成 BBCode → HTML 转换后,再用于包裹最终渲染出的函数名等片段
嵌套回复中用
需注意上下文隔离楼中楼场景下,子回复引用父帖某段代码(如
response.data.items),这个 <pre class="brush:php;toolbar:false;"> 必须独立包裹,不能复用父帖的 DOM 节点。否则 CSS 选择器批量操作(如统一加复制按钮)会误触。</pre>- 每个
应有独立作用域:子回复里的 <code>response.data.items 和父帖里的不是同一个节点 - 避免用 class="code" 统一控制——不同语言需不同高亮规则,应靠
language-javascript这类属性区分 - 别在
里放交互控件(如复制按钮):它是语义容器,不是操作区;按钮应放在外层 <section> 或 <div> 中 实际最容易被忽略的,是 <code> 的语义边界:它只声明“这是代码”,不负责格式、不参与解析、不绑定行为。混用它来实现高亮、复制、折叠,都会在复杂嵌套或 SSR 场景下暴露结构脆弱性。
- 后端入库前,











