PHP - 去除多余的空白但不包括换行符

14

我正在寻找一种方法来从字符串中移除多余的空格(即,如果两个或更多的空格相邻,只保留一个并删除其他空格),我找到了这篇从字符串中去掉额外空白,我想使用这个解决方案:

$foo = preg_replace( '/\s+/', ' ', $foo );

但是这样也会删除换行符,而我想保留它们。有没有办法在去除多余空格的同时保留换行符?


\s替换为一个空格?如果您还想删除制表符,请使用/[\t ]+/ - HamZa
3个回答

30

http://www.php.net/manual/zh/regexp.reference.escape.php 定义了\h 任何水平空白字符(自 PHP 5.2.4 起),因此您可能正在寻找此内容。

$foo = preg_replace( '/\h+/u', ' ', $foo );

或者您可以明确列出您想要影响的所有字符

$foo = preg_replace( '/\t +/', ' ', $foo );

2
我认为这是错误的,因为它将所有空格都删除了 :) - Timo Huovinen
2
为了保留换行符,您可以使用一个解决方法,例如将所有字符串按换行符拆分成数组,清理每个部分,然后再次通过换行符合并。 - Tebe

6
如果您使用preg_replace的时候发现一些符号被转换成了�(例如,西里尔字母大写字母R / Р),请改用mb_ereg_replace而不是preg_replace
$value = mb_ereg_replace('/\h+/', ' ', $value);

使用 preg_replace 的 u 修饰符已经足够。 - Your Common Sense

5

如果你想要移除多余的空格(不包括制表符、换行等),你可以使用十六进制代码来更加具体:

    $text = preg_replace('/ +/', ' ', $text);

1
有很多空格字符不是ASCII 32(\x20)空格。 - Piskvor left the building

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接