Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除字符串中多余的空白_Php_String - Fatal编程技术网

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

Php 删除字符串中多余的空白,php,string,Php,String,我从数据库查询中收到一个字符串,然后在将其放入CSV文件之前删除所有HTML标记、回车和换行符。唯一的问题是,我找不到一种方法来删除字符串之间多余的空白 删除内部空白字符的最佳方法是什么 $str = str_replace(' ','',$str); 或者,替换为下划线;等等。不确定您到底想要什么,但有两种情况: 如果您只是处理字符串开头或结尾多余的空格,可以使用trim()、ltrim()或rtrim()将其删除 >P>如果您在一个字符串中处理额外的空格,请考虑一个“多个白皮书 >“*>

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

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

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

或者,替换为下划线;等等。

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

  • 如果您只是处理字符串开头或结尾多余的空格,可以使用
    trim()
    ltrim()
    rtrim()
    将其删除

  • >P>如果您在一个字符串中处理额外的空格,请考虑一个“多个白皮书<代码> >“*>代码> >一个空白”<代码>“

    ”。 示例:

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


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

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

    ? productID =26%20via%20@LFS
    
    通常情况下,这不会是一个问题,但我得到了很多SQL注入尝试,所以我将任何无效ID重定向到404。我使用preg_replace方法将无效的productID字符串转换为有效的productID

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

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

    其他示例都不适用于我,因此我使用了以下示例:

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

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

    如果您只想替换字符串中的多个空格,例如:
    “此字符串有很多空格。”
    你希望答案是
    “此字符串有很多空间”
    ,您可以使用以下解决方案:

    $strng = "this string                        have lots of                        space  .   ";
    
    $strng = trim(preg_replace('/\s+/',' ', $strng));
    
    echo $strng;
    

    如果从用户输入[或其他不受信任的来源]获取有效负载,则使用preg_replace()存在安全缺陷。PHP使用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;
    }
    
    您可以使用:

    $str = trim(str_replace("  ", " ", $str));
    
    将从字符串的两侧删除额外的空格,并将字符串中的两个空格转换为一个。请注意,这不会将一行中的三个或更多空格转换为一个! 我可以建议的另一种方法是使用内爆和爆炸,这是更安全的,但完全不是最佳的

    $str = implode(" ", array_filter(explode(" ", $str)));
    
    我的建议是使用原生for循环或使用regex来完成这类工作。

    $str=“我是一名PHP开发人员”;
    
    $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);
    
    $str_length=strlen($str); $str_arr=str_split($str); 对于($i=0;$i<$str_length;$i++){ 如果(isset($str_arr[$i+1])&$str_arr[$i]=''&&$str_arr[$i]==$str_arr[$i+1]){ 未结算($str_arr[$i]); } 否则{ 继续; } } 回波内爆(“,$str_arr);
    我最近写了一个简单的函数,它可以在没有正则表达式的情况下从字符串中删除多余的空格
    内爆(“”,array\u filter(explode(“”,$str))
    请发布一个原始字符串和所需字符串的示例。您还可以澄清最终输出需要如何处理吗?您是否将逗号插入CSV数据中,从已包含逗号的数据库中获取数据,将字符串输入到处理CSV插入的函数中,等等?好的,最终输出需要是一个字符串,每个单词由一个空格分隔,目前它是多个空格。@Joe,我不会浪费时间,我会开始赞扬所有曾经帮助过你的人$foo=preg_replace('/\s+/','$foo);使用
    $foo=preg_替换('/\s+/','$foo)
    将消除
    nl2br()的影响。
    在使用preg\u replace之前只需使用nl2br,您应该可以使用。Typo/Escaper注意-如果代码没有为您删除额外的空白,请确保在“s”之前有“\”:)一些在线php测试页面将其删除:)这应该是CSS安全的,对吗?如中所示,这将安全地压缩包含一个长的多行CSS字符串的变量?这将删除所有空白。他只是想让字符串正常化。我想要的是@Gigala(尽管这不是问题)@Gigala“删除内部空白字符的最佳方法是什么?”这是一个问题。“这个答案完全满足了这一点。”对于最后一句话,科莱德说得对。但在导言中,这个问题被表述为“多余的空格”,重点是多余的空格。你最终解决了OP的实际问题,所以这没什么大不了的,但只要我们对它有技术性的了解……如果空间数是偶数,这就行不通了,比如说:
    Hi Earth
    ,中间有4个空间将变成:
    HiEarth
    。这并不能解决我与该问题相关的问题。谢谢,@wp78de,但出于任何原因,我只与
    \s+
    有问题。虽然它早在2014年,所以可能已经更改了,在过去3年中没有接触过PHP,不能发表评论,但会留下当前的答案,因为它是一个解决方案,在某些情况下可能仍然是。如果您指定“e”修改器,它只会使用eval执行它:它还说“此功能在PHP5.5.0中被弃用,并从PHP7.0.0起被删除。”因此,您无法在preg_replace中对内容进行求值。如果空间长度超过两个空间,则无法正确转换多个空间。
    $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);