【发布时间】:2012-08-26 00:18:28
【问题描述】:
我对 PHP 的引用 (&) 有一个奇怪的问题。
假设我有一个看起来像这样的表单:
<form name="form1" id="form1" method="post">
Name: <input type="text" name="name" /><br />
Email: <input type="text" name="email" /><br />
Location: <input type="text" name="location" /><br />
Phone Number: <input type="text" name="phonenumber" /><br />
</form>
然后我将该表单提交给另一个 PHP 处理程序。处理程序会这样做:
foreach($_POST as $name => &$value)
{
//more code here
}
echo $_POST['phonenumber']; //Returns value of $_POST['location'] for some reason
有人可以向我解释为什么电话号码的价值会是任何位置的价值吗?即使 foreach 内部没有代码,它仍然会这样做。
编辑:
对于那些想知道 foreach 内部发生了什么或者我为什么要这样做的人来说,这是因为它是一种干净的方式来转义提交给处理程序的所有数据,而不是手动一次执行一个变量,尤其是当你有动态输入进来时。所以像这样:
foreach($_POST as $name => &$value)
{
$value = preg_replace( "/[<>#$%]/", "", $value);
$value = preg_replace('/\s\s+/', ' ', $value);
}
除了我上面提到的问题之外,它工作得很好。
【问题讨论】:
-
可能是 $_POST 的构造方式吗?尝试将其分配给您自己的数组,然后在该数组上运行 foreach(带引用)。
-
即使 foreach 内部没有代码,它仍然会这样做。 什么?
-
在我看来,不可能。你用的是什么 PHP 版本?
-
您是稍后分配给
&$value,还是使用相同的名称多次执行此循环? (基本上,像这样的循环在 PHP 中很糟糕,而且真的很痛,所以尽量不要这样做。) -
循环内的代码不相关。我已经删除了它,它仍然做同样的事情——因此是我帖子中的最后一句话。
标签: php post reference foreach