PHP -删除多余的空白但不删除新行

pcrecxhr  于 2023-05-21  发布在  PHP
关注(0)|答案(4)|浏览(102)

我一直在寻找一种方法来删除字符串中多余的空格(也就是说,如果两个或更多的空格相邻,只留下1个并删除其他空格),我发现了这个Remove excess whitespace from within a string,我想使用这个解决方案:

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

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

tf7tbtn2

tf7tbtn21#

http://www.php.net/manual/en/regexp.reference.escape.php定义了\h any horizontal whitespace character (since PHP 5.2.4),所以您可能正在寻找

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

也可以显式列出要影响的所有字符

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

doinxwow2#

如果您的某些符号在preg_replace之后被转换为(例如西里尔大写字母R/ Р),请使用mb_ereg_replace而不是preg_replace

$value = mb_ereg_replace('/\h+/', ' ', $value);
ulmd4ohb

ulmd4ohb3#

如果你想删除多余的纯空格(不是制表符,换行符等),你可以使用十六进制代码来更具体:

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

nmpmafwu4#

我用这种方式来保持新的一行,并取代所有多余的连续空格与单一的空间。

function singleSpaceWNL($string) {
    $strArr = explode(PHP_EOL, $string);
    $newArr = [];
    foreach($strArr as $str) {
        array_push($newArr, preg_replace('#\s+#', ' ', trim($str)));
    }
    return implode(PHP_EOL, $newArr);
}

相关问题