Php 转义表单数据

Php 转义表单数据,php,security,escaping,Php,Security,Escaping,我在转义数据方面遇到了一点问题,或者至少在转义数据所涉及的代码的干净性方面遇到了一点问题 比方说,我正在逃离一个名为“FirstName”的文本字段,它看起来像这样: $FirstName = mysqli_real_escape_string($link, $_POST['FirstName']); $FirstName = preg_replace( "/[<>#$%]/", "", $FirstName); $FirstName = preg_replace('/\s\s+/'

我在转义数据方面遇到了一点问题,或者至少在转义数据所涉及的代码的干净性方面遇到了一点问题

比方说,我正在逃离一个名为“FirstName”的文本字段,它看起来像这样:

$FirstName = mysqli_real_escape_string($link, $_POST['FirstName']);
$FirstName = preg_replace( "/[<>#$%]/", "", $FirstName);
$FirstName = preg_replace('/\s\s+/', ' ', $FirstName);
foreach($_POST as $name => $value)
{
    $value = preg_replace( "/[<>#$%]/", "", $value);
    $value = preg_replace('/\s\s+/', ' ', $value);
}

$u POST['FirstName']中的其他字符已经被删除了吗?

当然。通过引用而不是通过值使
foreach
循环,如下所示:

foreach($_POST as $name => &$value)
{
    $value = preg_replace( "/[<>#$%]/", "", $value);
    $value = preg_replace('/\s\s+/', ' ', $value);
}
foreach($\u作为$name=>&$value发布)
{
$value=preg_replace(“/[$%]/”,“”,$value);
$value=preg_replace('/\s\s+/',''$value);
}

注意
$value
前面的符号和。这意味着迭代数组时得到的
$value
是对数组本身中的值的引用,而不是该值的副本。

实际上,经过一天的测试,它似乎有问题。假设我有3篇文章被提交。姓名,电子邮件,然后是电话号码。您的解决方案为提交的最后一篇文章提供了第二篇文章的值。在本例中,它为phonenumber提供电子邮件的值。有什么想法吗?
foreach($_POST as $name => &$value)
{
    $value = preg_replace( "/[<>#$%]/", "", $value);
    $value = preg_replace('/\s\s+/', ' ', $value);
}