【问题标题】:PHP: explode(' ',$string); re-inserts removed blank spacePHP: 爆炸(' ',$string);重新插入删除的空格
【发布时间】:2013-04-10 13:51:59
【问题描述】:

$_GET['search'] 导入以下字符串:“first second \ \ third”(“second”和“third”之间的空格只是空格,添加斜线是因为 SO 的文本区域不允许多个连续的空格)。

接下来的脚本就是处理导入的字符串:

$searchString = $_GET['search'];
$searchString = preg_replace('/(\W)(\S)(\s+)/', '', $searchString);
echo $searchString . ' ';
print_r( explode(' ', $searchString) );

奇怪的是,结果是:

first second third Array ( [0] => first [1] => second [2] => [3] => [4] => third )

即正如预期的那样,当echoing 时,空格会从$searchString 中删除,但PHP 的explode 似乎会“重新插入”它们。这怎么可能?

【问题讨论】:

  • 我不相信你“看到”的是实际发生的事情。如果你echo $searchString你做preg_replace,你会看到什么? (请记住,HTML 文档中的多个连续空格是typically rendered as a single space。)
  • @Matt Gibson 完全一样的结果,去掉了空格。
  • 是的。这意味着 preg_replace 实际上并没有做你认为它正在做的事情。是您的浏览器在向您显示输出时将多个空格压缩为一个空格。他们从头到尾都在那里,这就是explode 仍在寻找他们的原因。
  • 有道理...如果您将其作为一个发布,我会将其标记为“正确答案”!
  • 当你在浏览器中测试这样的东西时,将字符串包裹在
     标签中,这样空白就更明显了。

标签: php get preg-replace explode


【解决方案1】:

一个简单的解决方法是使用array_filter() 删除空数组值:

$new_array = array_filter(explode(' ', $searchString));

【讨论】:

    【解决方案2】:

    我认为您的正则表达式并没有按照您的想法做。或者也许你应该解释它应该做什么。如果要删除多个空格,请使用:

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

    【讨论】:

    • 效果很好!谢谢您的帮助。只要系统允许,我就会打勾!
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多