【发布时间】: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