从字符串中删除多余的空格

时间:2009-11-09 19:52:01

标签: php string

我从数据库查询中收到一个字符串,然后在将其放入CSV文件之前删除所有HTML标记,回车符和换行符。唯一的问题是,我找不到从字符串之间的中删除多余空格的方法。

删除内部空白字符的最佳方法是什么?

11 个答案:

答案 0 :(得分:269)

不确定你想要什么,但这里有两种情况:

  1. 如果您只是在字符串的开头或结尾处理多余的空格,则可以使用trim()ltrim()rtrim()来删除它。

  2. 如果您正在处理字符串中的额外空格,请考虑使用单个空格 {preg_replace多个空格 " "* {1}}。

  3. 示例:

    " "

答案 1 :(得分:48)

$str = str_replace(' ','',$str);

或者,用下划线代替& NBSP;等等。

答案 2 :(得分:22)

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

上面的代码行将删除额外的空格,以及前导和尾随空格。

答案 3 :(得分:21)

没有其他例子对我有用,所以我用过这个:

trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))

这会将所有制表符,新行,双倍空格等替换为简单的1个空格。

答案 4 :(得分:8)

如果您只想替换字符串中的多个空格,例如:"this string have lots of space . " 你希望得到答案 "this string have lots of space",您可以使用以下解决方案:

$strng = "this string                        have lots of                        space  .   ";

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

echo $strng;

答案 5 :(得分:4)

$str = preg_replace('/[\s]+/', ' ', $str);

答案 6 :(得分:3)

如果从用户输入(或其他不受信任的来源)获得有效负载,则使用preg_replace()会有安全缺陷。 PHP使用eval()执行正则表达式。如果未正确清理传入的字符串,则您的应用程序可能会遭受代码注入

在我自己的应用程序中,我没有烦恼清理输入(并且因为我只处理短字符串),而是做了一个处理器密集型功能,尽管它是安全的,但它没有任何eval()功能,因此它是安全的。

function secureRip(string $str): string { /* Rips all whitespace securely. */
  $arr = str_split($str, 1);
  $retStr = '';
  foreach ($arr as $char) {
    $retStr .= trim($char);
  }
  return $retStr;
}

答案 7 :(得分:2)

您可以使用:

$str = trim(str_replace("  ", " ", $str);

删除字符串两端的多余空格,并将字符串中的多个空格转换为一个

答案 8 :(得分:1)

为了扩展Sandip的答案,我在日志中出现了一堆字符串,这些字符串在bit.ly中被错误编码。他们的意思是只对URL进行编码,但在空格之后放置一个推文句柄和其他一些东西。它看起来像这样

? productID =26%20via%20@LFS

通常情况下,这不是问题,但是我会进行大量的SQL注入尝试,因此我将任何非有效ID的内容重定向到404.我使用preg_replace方法生成无效的productID将字符串转换为有效的productID。

$productID=preg_replace('/[\s]+.*/','',$productID);

我在网址中查找空格,然后删除其后的所有内容。

答案 9 :(得分:0)

$str = "I      am a PHP   Developer";
$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);

答案 10 :(得分:0)

我最近编写了一个简单的函数,该函数无需使用正则表达式implode(' ', array_filter(explode(' ', $str)))即可从字符串中删除多余的空格。