7

如您所知,当魔术引号打开时,单引号会在值和键中进行转义。大多数在运行时删除 Magic Quotes 的解决方案只取消转义值,而不是键。我正在寻找一种可以使键和值不转义的解决方案...

我在 PHP.net 上发现了这段代码:

$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process))
{
    foreach ($val as $k => $v)
    {
        unset($process[$key][$k]);
        if (is_array($v))
        {
            $process[$key][stripslashes($k)] = $v;
            $process[] = &$process[$key][stripslashes($k)];
        }
        else
        {
            $process[$key][stripslashes($k)] = stripslashes($v);
        }
    }
}
unset($process);

但我不喜欢“&”引用和数组,因为我过去遇到过这样错误......

在运行时是否有一种“更好”的方法来取消魔术引号(键和值)而不是上面的方法?

4

2 回答 2

8

我认为这更清洁并避免了参考错误:

function unMagicQuotify($ar) {
  $fixed = array();
  foreach ($ar as $key=>$val) {
    if (is_array($val)) {
      $fixed[stripslashes($key)] = unMagicQuotify($val);
    } else {
      $fixed[stripslashes($key)] = stripslashes($val);
    }
  }
  return $fixed;
}

$process = array($_GET,$_POST,$_COOKIE,$_REQUEST);
$fixed = array();
foreach ($process as $index=>$glob) {
  $fixed[$index] = unMagicQuotify($glob);
}
list($_GET,$_POST,$_COOKIE,$_REQUEST) = $fixed;
于 2010-01-25T15:17:38.753 回答
-1
array_walk_recursive($_POST, 'stripslashes');

对 GET 和 COOKIE 执行相同的操作。

于 2010-01-25T14:58:38.150 回答