我得到$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('/[\s]+/mu', ' ', $var);

\s已经包含制表符和新行,所以上面的正则表达式似乎足够了。

没有preg_replace ()

$str = "This is   a Text \n and so on \t     Text text.";
$str = str_replace(["\r", "\n", "\t"], " ", $str);
while (strpos($str, "  ") !== false)
{
    $str = str_replace("  ", " ", $str);
}
echo $str;

你需要:

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

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

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

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

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

我不能在这里重复这个问题:

$x = "this    \n \t\t \n    works.";
var_dump(preg_replace('/\s\s+/', ' ', $x));
// string(11) "this works."

我不确定这是否只是一个转录错误,但在您的示例中,您使用的是单引号字符串。如果有双引号字符串,\n和\t只被当作换行符和制表符。那就是:

'\n\t' != "\n\t"

编辑:正如Codaddict指出的那样,\s\s+不会取代一个制表符。我仍然不认为使用\s+是一个有效的解决方案,所以这样如何:

preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);