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

val*_*epu 8 php regex whitespace newline trim

我正在寻找一种从字符串中删除多余空格的方法(也就是说,如果两个或多个空格彼此相邻,只留下1并删除其他空格),我发现从字符串中删除多余的空格我想要使用此解决方案:

$foo = preg_replace( '/\s+/', ' ', $foo );
Run Code Online (Sandbox Code Playgroud)

但这会删除新的线条,而我想保留它们.删除多余的空格是否有任何方法可以保留换行符?

tes*_*t30 21

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

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

例如:http://ideone.com/NcOiKW

  • 我认为这是错的,因为对我来说它删除了所有的空白:) (2认同)
  • 为了保留换行符,您可以采取解决方法,例如将所有字符串按换行符拆分为数组,清理每个部分并通过换行符再次内爆 (2认同)

小智 6

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

\n
$value = mb_ereg_replace('/\\h+/', ' ', $value);\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

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

    $text = preg_replace('/\x20+/', ' ', $text);
Run Code Online (Sandbox Code Playgroud)