如您所知,当Magic Quotes为ON时,单引号会在值和键中转义。大多数在运行时删除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);
但我不喜欢“&”引用和数组,因为我过去有this one这样的错误...
有没有一种“更好”的方法来在运行时使用魔术引号(键和值)而不是上面的方法?
答案 0 :(得分:7)
我认为这有点清洁,避免引用错误:
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;
答案 1 :(得分:-1)
array_walk_recursive($_POST, 'stripslashes');
为GET和COOKIE做同样的事。