php去除字符串多余空格需区分首尾与中间空格:首尾用trim(),中间重复空格用preg_replace('/\s+/', ' ', $str)压缩后配合trim()实现归一化清理。

PHP 中去除字符串多余空格,核心是区分“首尾空格”和“中间重复空格”两种情况,不能一概用 trim() 解决。
只去首尾空格:用 trim() 最直接
trim() 是最常用、最安全的首尾空白清理函数,它默认移除字符串开头和结尾的空格、制表符(\t)、换行符(\n、\r)、空字符(\0)和垂直制表符(\v)。
- 只需去两端空格?直接写
trim($str)即可 - 想自定义去除哪些字符?传第二个参数,比如
trim($str, " \t\n\r") - 只去左边或右边?用
ltrim()或rtrim()
压缩中间多个空格为一个:正则 + preg_replace()
当字符串内部有连续多个空格(如 "a b"),需要压缩成单个空格,trim() 无效,得用正则:
- 标准写法:
preg_replace('/\s+/', ' ', $str)—— 把所有连续空白(含空格、制表、换行)替换成单个空格 - 如果只要处理纯空格(不含制表/换行),用
preg_replace('/ +/', ' ', $str) - 替换后首尾可能又多出空格,建议链式调用:
trim(preg_replace('/\s+/', ' ', $str))
彻底清理:空格归一化 + 首尾裁剪(推荐组合)
实际业务中常见需求是“所有空白统一为单空格,且首尾不留空”,一行代码就能搞定:
立即学习“PHP免费学习笔记(深入)”;
-
trim(preg_replace('/\s+/', ' ', $str))—— 兼容性好,适用于 PHP 5.2+ - 若需保留换行语义(比如富文本预处理),可先换行转空格再处理:
str_replace(["\r\n", "\r", "\n"], ' ', $str),再套上面逻辑 - 注意:正则中的
\s在 UTF-8 环境下仍能正确匹配中文全角空格以外的空白;如需处理全角空格( ),需额外加匹配/[\s ]+/u
性能小提醒:简单场景优先用 str_replace
如果确定字符串里只有空格(无制表、换行等),且只是去重,不用正则也能更快:
- 多次替换法(适合少量空格):
str_replace(' ', ' ', $str)循环几次,但不推荐 - 更稳的替代:
implode(' ', array_filter(explode(' ', $str)))—— 拆分再过滤空元素再拼接,对纯空格有效,但会丢失原始换行结构 - 综合来看,
preg_replace+trim平衡了通用性、可读性和性能,是大多数项目的首选











