Я создал небольшой PHP-скрипт, который запускается на сервере с PHP 5.2.17 и директивой magic_quotes_gpc
.Когда filter_input() удаляет следы переменных POST?
У меня нет доступа для записи в файл php.ini, и я хотел бы удалить все слэши с пользовательских входов.
Это должно работать, даже если директива magic_quotes_gpc
отключена (например, при перемещении сценариев на другой сервер).
Он также должен работать рекурсивно, когда массивы передаются пользователем.
Я предпочитаю использовать встроенную функцию.
<html>
<head>
<title>HP</title>
</head>
<body>
<form method="POST" action="magic.php">
<input type="text" value="te\\"st" name="test1">
<input type="text" value="te\\"st" name="test2[tw"o]">
<input type="submit" value="submit">
</form>
<?php
echo "<pre>";
echo "magic_quotes: ".get_magic_quotes_gpc()."\n";
echo "<hr>test1";
echo "filter_input: ".filter_input(INPUT_POST, "test1")."\n";
echo "POST: ".$_POST['test1']."\n";
echo "<hr>test2 (filter)";
print_r(filter_input_array(INPUT_POST))."\n";
echo "<hr>test2 (post)";
print_r($_POST)."\n";
echo "</pre>";
?>
</body>
</html>
Что дает следующий результат на моем сервере:
magic_quotes: 1
filter_input: te\\"st
POST: te\\\\\"st
test2 (filter)Array
(
[test1] => te\\"st
[test2] => Array
(
[tw\"o] => te\\"st
)
)
test2 (post)Array
(
[test1] => te\\\\\"st
[test2] => Array
(
[tw\"o] => te\\\\\"st
)
)
Кажется, что ключи массива за исключением того, косые удаляются.
Или косые черты не добавлены? (filter_input()
и filter_input_array()
может игнорировать magic_quotes_gpc
директивы, так как он устарел, но я не мог найти ссылку для этого)
ли поведение для удаления/не устанавливая косую черту из filter_input()
и filter_input_array()
каких-то образом зависят от системы-параметров?
Я не понимаю предупреждения here.
Я использую подобную вещь в данный момент, но если filter_input() и filter_input_array() делать то, что мне нужно, я бы предпочел не записывая для этого дополнительную рекурсивную функцию. Но я понятия не имею, почему filter_input делает то, что он делает. Это было бы здорово узнать. –