我得到$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,只删除单个空格。有人能告诉我怎么做吗?


当前回答

你需要:

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

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

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

其他回答

这是我要用的:

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

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

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

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

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

这将用一个选项卡替换多个选项卡

preg_replace("/\s{2,}/", "\t", $string);

没有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;

没有preg_replace,在loop的帮助下。

<?php

$str = "This is   a Text  and so on      Text text.";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
    if (isset($str_arr[$i + 1])
       && $str_arr[$i] == ' '
       && $str_arr[$i] == $str_arr[$i + 1]) {
       unset($str_arr[$i]);
    } 
    else {
      continue;
    }
}

 echo implode("", $str_arr) ; 

 ?>

你需要:

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

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

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