PHP: как (правильно) удалить экранированные кавычки в массивах, когда включены магические кавычки
Как вы знаете, когда магические кавычки включены, одинарные кавычки экранируются в значениях, а также в ключах. Большинство решений по удалению магических кавычек во время выполнения только неискаженные значения, а не ключи. Я ищу решение, которое позволит скрыть ключи и значения...
Я нашел на 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);
Но мне не нравятся ссылки и массивы "&", так как в прошлом у меня были такие ошибки...
Есть ли "лучший" способ удалить магические кавычки (ключи и значения) во время выполнения, чем приведенный выше?
2 ответа
Решение
Я думаю, что это немного чище и позволяет избежать ошибочных ссылок:
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;
array_walk_recursive($_POST, 'stripslashes');
Сделайте то же самое для GET и COOKIE.