Мне нужно написать переносимый код, который будет работать на общем сервере с включенным magic_qoutes_gpc
, и я не могу изменить это в php.ini или .htaccess. (на сервере работает php 5.2)
Кажется, существует множество функций для стрип-слэшей со всех суперглобальных $_GET
, $_POST
и т. Д., Но я не уверен, что это лучший вариант. Также некоторые комментарии здесь , кажется, говорят, что к клавишам также добавлены косые черты, которые также должны быть удалены. Так что я должен использовать один на сайте PHP:
if (get_magic_quotes_gpc()) {
$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);
}
или как-то так: (из этого ответа: PHP - более короткое решение для магических кавычек )
function strip_slashes_recursive(&$value) {
if (!is_array($value)) {
$value = strip_slashes($value);
} else {
foreach (array_keys($value) as $key) {
$arrayValue = strip_slashes_recursive($value[$key]);
unset($value[$key]);
$value[strip_slashes($key)] = $arrayValue;
}
}
}
foreach (array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST) as &$array) {
strip_slashes_recursive($array);
}
// don't forget to unset references or it can lead to very nasty bugs
unset($array);
или даже как-то так:
if (get_magic_quotes_gpc()) {
function undoMagicQuotes($array, $topLevel=true) {
$newArray = array();
foreach($array as $key => $value) {
if (!$topLevel) {
$key = stripslashes($key);
}
if (is_array($value)) {
$newArray[$key] = undoMagicQuotes($value, false);
}
else {
$newArray[$key] = stripslashes($value);
}
}
return $newArray;
}
$_GET = undoMagicQuotes($_GET);
$_POST = undoMagicQuotes($_POST);
$_COOKIE = undoMagicQuotes($_COOKIE);
$_REQUEST = undoMagicQuotes($_REQUEST);
}
Может ли кто-нибудь объяснить плюсы / минусы каждого подхода и / или совершенно другого подхода и насколько они тщательны, и если они удаляют косые черты с ключа, а также значение.
(также хорош этот метод: PHP: как (правильно) удалить экранированные кавычки в массивах, когда включены магические кавычки )
(а также кажется, что все эти методы неполны, так как они не удаляют косые черты от всех затронутых суперглобалистов На какие суперглобалы воздействует magic_quotes_gpc = 1? )