应使用 标签原样显示代码、日志等含空格换行的文本,它保留空白符但不提供语义;需嵌套 表示代码语义,服务端须对用户输入做 html 编码防 xss。

用 <pre class="brush:php;toolbar:false;"></code> 包裹需要保留空格和换行的文本</H3>
<p>HTML 默认会把连续空格、制表符、换行都压缩成一个空格,想原样显示代码片段、日志、ASCII 图这类内容,必须用 <code><pre class="brush:php;toolbar:false;"></code>。它不负责样式,只告诉浏览器:“别动我的空白符”。</p>
<p>常见错误是只靠 <code><code></code> 标签——它语义上表示代码,但不会保留缩进或换行;或者误用 <code><div></code> + <code>white-space: pre</code> CSS,这在语义和可访问性上都不如原生 <code><pre class="brush:php;toolbar:false;"></code>。</p>
<ul>
<li><code><pre class="brush:php;toolbar:false;"></code> 本身不带等宽字体,通常需配合 <code><code></code> 使用,比如 <code><pre class="brush:php;toolbar:false;"><code>...</code></pre>
<pre class="brush:php;toolbar:false;"></code> 里写中文或长行内容时,可能溢出容器,需额外加 <code>overflow-x: auto</code> 或 <code>word-break: break-word</code></li>
<li>服务端渲染时注意:如果内容含用户输入,<code><pre class="brush:php;toolbar:false;"></code> 不自动转义 HTML 实体,得先对 <code><</code>、<code>></code>、<code>&</code> 做 HTML 编码,否则有 XSS 风险</li>
</ul>
<H3><code><pre class="brush:php;toolbar:false;"></code> 和 <code><code></code> 的分工要分清</H3>
<p><code><pre class="brush:php;toolbar:false;"></code> 是布局行为(保留空白),<code><code></code> 是语义标签(表示一段计算机代码)。两者常嵌套使用,但不能互相替代。</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/1328" title="小艺"><img
src="https://img.php.cn/upload/ai_manual/000/000/000/175680183422075.png" alt="小艺" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/1328" title="小艺">小艺</a>
<p>华为公司推出的AI智能助手</p>
</div>
<a href="/ai/1328" title="小艺" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>
<p>比如展示一段 Python 函数,正确写法是:<code><pre class="brush:php;toolbar:false;"><code class="python">def hello():\n print("hi")</code></pre>;只用 <code> 会导致缩进消失;只用 <pre class="brush:php;toolbar:false;"></pre> 则屏幕阅读器无法识别这是代码内容。立即学习“前端免费学习笔记(深入)”;
- SEO 和可访问性依赖语义:搜索引擎和读屏软件靠
<code>理解内容类型 - 语法高亮工具(如 Prism.js、highlight.js)通常监听的是
<code>标签,不是<pre class="brush:php;toolbar:false;"></pre> - 若只是想让普通段落保留换行(比如地址、诗歌),用
<pre class="brush:php;toolbar:false;"></pre>过重,更适合用<div> + <code>white-space: pre-line空格、换行、编码问题最容易漏掉
写在
<pre class="brush:php;toolbar:false;"></pre>里的内容,HTML 解析器仍按标准规则处理:开头结尾的空白会被裁掉,内部的不会自动展开,而换行符在源码里是\n还是\r\n一般不影响渲染,但服务端模板拼接时容易混入不可见控制字符。- 模板中动态插入内容时,确认是否已 trim 掉首尾空白,否则
<pre class="brush:php;toolbar:false;"></pre>会多出一行空行 - 从数据库或 API 拿到的字符串若含
\r\n,现代浏览器基本兼容,但老版本 IE 可能渲染异常,统一转成\n更稳妥 - 避免在
<pre class="brush:php;toolbar:false;"></pre>内直接写未编码的<script></script>或<style></style>片段,哪怕被<code>包着,浏览器仍可能尝试解析
真正麻烦的不是怎么写
<pre class="brush:php;toolbar:false;"></pre>,而是什么时候不该用它——比如响应式排版下固定等宽破坏布局,或内容来自不可信来源却忘了 HTML 编码。这些点不报错,但上线后才暴露。 - 模板中动态插入内容时,确认是否已 trim 掉首尾空白,否则










