Я создал небольшой PHP-скрипт, который запускается на сервере с PHP 5.2.17 и включенной директивой magic_quotes_gpc
.
У меня нет прав на запись в файл php.ini, и я хотел бы удалить все слэши из пользовательского ввода.
Это должно работать, даже если директива magic_quotes_gpc
отключена (например, при перемещении сценариев на другой сервер).
Он также должен работать рекурсивно, когда массивы передаются пользователем.
Я предпочитаю использовать встроенную функцию.
<code><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 "
";
?>
Что дает следующий результат на моем сервере:
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()
от системных параметров?
Я не понимаю предупреждение здесь .