代码之家  ›  专栏  ›  技术社区  ›  bsb_coffee

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

  •  117
  • bsb_coffee  · 技术社区  · 16 年前

    我从数据库查询中收到一个字符串,然后在将它放入CSV文件之前删除所有HTML标记、回车和换行符。唯一的问题是,我找不到移除 过量的 来自的空白 之间 琴弦。

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

    9 回复  |  直到 7 年前
        1
  •  261
  •   Vaidas Mark    12 年前

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

    1. 如果你只是处理多余的 空白区 在字符串的开头或结尾可以使用 trim() , ltrim() rtrim() 移除它。

    2. 如果要处理字符串中的额外空格,请考虑 preg_replace 倍数 白色空间 " "* 单用 空白区 " " .

    例子:

    $foo = preg_replace('/\s+/', ' ', $foo);
    
        2
  •  44
  •   Cory Dee    16 年前
    $str = str_replace(' ','',$str);
    

    或者,用下划线等替换。

        3
  •  22
  •   Amit Singh    12 年前

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

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

        4
  •  19
  •   Lukas Liesis    7 年前

    其他的例子对我来说都不管用,所以我用了这个:

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

    这会将所有选项卡、新行、双空格等替换为简单的1空格。

        5
  •  8
  •   Peanut    11 年前

    如果只替换字符串中的多个空格,例如: "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;
    
        6
  •  4
  •   Amir Forsati    7 年前
    $str = preg_replace('/[\s]+/', ' ', $str);
    
        7
  •  3
  •   Fom    8 年前

    如果您从用户输入[或其他不受信任的来源]获得有效负载,那么使用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;
    }
    
        8
  •  1
  •   JScarry    12 年前

    为了扩展sandip_的答案,我在日志中显示了一组字符串,这些字符串是用bit.ly错误编码的。他们打算只编写URL代码,但在一个空格后放上一个twitter句柄和其他一些东西。看起来像这样

    ? productID =26%20via%20@LFS
    

    通常情况下,这不是问题,但我有很多SQL注入尝试,所以我将任何无效的ID重定向到404。我使用preg_replace方法将无效的productID字符串转换为有效的productID。

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

    我在URL中查找一个空格,然后删除它后面的所有内容。

        9
  •  1
  •   Amir Forsati    8 年前

    你可以使用:

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

    这个 从两侧删除多余的空白 弦和 将多个空格转换为一个空格 在字符串中。

    推荐文章