strip_tags()仅删除html标签,不处理文本节点中的空白字符,需结合html_entity_decode、unicode感知正则(/\p{z}\s+/u)及textcontent/innertext语义选择来精准清理空格。

strip_tags() 能清标签,但清不掉 HTML 源码里混在标签之间的空格和换行;preg_replace() 硬删又容易误伤语义空格。真要提取干净文本,得先分清“谁在产生空格”——是 DOM 结构本身、解析器行为,还是原始字符串残留。
PHP 中用 strip_tags() 后仍有空格?先看来源
常见错误现象:strip_tags($html) 返回的字符串头尾或中间一堆 \n、\r、\t,甚至多个连续空格。
- 这些空格/换行往往来自 HTML 源码的缩进格式(比如
<p>\n Hello\n</p>),strip_tags()不处理它们 -
strip_tags()只删标签,不碰文本节点里的空白字符 - 如果原始 HTML 是从数据库或富文本编辑器来的,还可能含 、
等不可见空格
Python BeautifulSoup 的 get_text() 换行混乱?别只靠默认调用
默认 get_text() 行为是:不 strip、用空字符串拼接、保留所有原始换行符 —— 这就是你看到 "第一段\n\n第二段" 的原因。
- 加
strip=True去首尾空白,但中间多换行还在 - 关键参数是
separator:设成' '或'\n'才能控制块级元素间怎么连接 - 对
<br>、<p></p>这类有语义换行的标签,get_text()默认忽略其渲染意图,需手动处理 - 若要保留
<pre class="brush:php;toolbar:false;"></pre>内原始空格,不能全局设strip=True,得单独提取再处理
HTML 字符串里有 、 、U+200A?正则不够用
普通 preg_replace('/\s+/', ' ', $str) 会漏掉 Unicode 空格字符,比如:
-
→ 实际是或\xc2\xa0(UTF-8) -
(窄空格)、(词间空格)等 Unicode 格式控制符 - JavaScript 动态插入的
\u200b(零宽空格)也会卡在文本里
更稳妥的做法是先用 html_entity_decode($str, ENT_QUOTES | ENT_HTML5, 'UTF-8') 解码,再用 mb_ereg_replace() 或 preg_replace() 配合 u 修饰符匹配 Unicode 空白:/[\p{Z}\s]+/u。
前端直接操作 DOM 时,textContent 和 innerText 差在哪?
想从页面中取纯文本,别无脑用 innerHTML + 正则清理 —— 它已被浏览器压缩过一次空格,信息已丢失。
-
textContent返回 DOM 树中所有文本节点内容,保留原始换行与空格(包括注释里的),不触发重排 -
innerText是渲染后可见文本,受 CSSdisplay:none、visibility:hidden影响,且会把换行转成单空格(类似浏览器渲染逻辑) - 若目标是“用户复制粘贴时看到的样子”,优先用
innerText;若要“源码级忠实还原”,用textContent配合white-space: pre-wrap渲染
真正难处理的,永远不是“怎么删”,而是“哪些空格该留”。比如表格单元格内的对齐空格、代码块缩进、人名中间的全角空格——删之前,先确认它是不是有意为之的格式信息。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











