我得到$row['message']从一个MySQL数据库,我需要删除所有的空白,如\n \t等。

$row['message'] = "This is   a Text \n and so on \t     Text text.";

应格式化为:

$row['message'] = 'This is a Text and so on Text text.';

我试着:

 $ro = preg_replace('/\s\s+/', ' ',$row['message']);
 echo $ro;

但它不删除\n或\t,只删除单个空格。有人能告诉我怎么做吗?


当前回答

说实话,如果你想要这样的东西

preg_replace('/\n+|\t+|\s+/',' ',$string);

其他回答

说实话,如果你想要这样的东西

preg_replace('/\n+|\t+|\s+/',' ',$string);

这是我要用的:

a.确保使用双引号,例如:

$row['message'] = "This is   a Text \n and so on \t     Text text.";

b.删除多余的空白,使用:

$ro = preg_replace('/\s+/', ' ', $row['message']); 
echo $ro;

它可能不是最快的解决方案,但我认为它需要最少的代码,而且应该可以工作。不过,我从未使用过mysql,所以我可能是错的。

你需要:

$ro = preg_replace('/\s+/', ' ', $row['message']);

您正在使用的\s\s+表示空格(空格、制表符或换行符)后面跟着一个或多个空格。这实际上意味着用一个空格替换两个或多个空格。

你想要的是用单个空格替换一个或多个空格,所以你可以使用模式\s\s*或\s+(推荐)

<?php
$str = "This is  a string       with
spaces, tabs and newlines present";

$stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str);

echo $str;
echo "\n---\n";
echo "$stripped";
?>

这个输出

This is  a string   with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);

这将用一个空格替换所有制表符、换行符以及多个空格、制表符和换行符的所有组合。