Intereting Posts
конвертировать строки с разделителями tab / space в вложенный массив ZF2 SOAP «Процедура отсутствует» Ошибка Как сделать несколько штрих-кодов с Zend 2? OpenCart – не отправлять электронные письма (уведомления или контактную страницу) Возможно ли обновить количество элементов заказа в Magento? Лучший способ обработки больших XML в PHP google-api-php-client – Диск – Вставка файла – Создание текстового файла – Содержимое не добавляется Как добиться того же результата с помощью Mysql Joins вместо вложенных подзапросов? Code Igniter – как бы вы структурировали этот сайт? Intervention imagick работает в терминале, но не в браузере Предотвращение входа пользователей из неавторизованной области PHP exec () использование памяти jQuery AJAX добавление таблицы tr в конце таблицы (PHP) Распространение содержимого массива равномерно по фиксированному числу столбцов Поиск и фильтры Zend IMAP

Когда filter_input () удаляет слэши переменных POST?

Я создал небольшой PHP-скрипт, который работает на сервере с PHP 5.2.17 и директивой magic_quotes_gpc .

У меня нет доступа для записи в файл php.ini, и я хочу удалить все слэши с пользовательских входов.

Это должно работать, даже если директива magic_quotes_gpc отключена (например, при перемещении сценариев на другой сервер).

Он также должен работать рекурсивно, когда массивы передаются пользователем.
Я предпочитаю использовать встроенную функцию.

 <html> <head> <title>HP</title> </head> <body> <form method="POST" action="magic.php"> <input type="text" value="te\\&quot;st" name="test1"> <input type="text" value="te\\&quot;st" name="test2[tw&quot;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() каким-то образом зависящим от системных параметров?
Я не понимаю этого предупреждения.

Мне не удалось найти его в официальной документации, но filter_input() работает с необработанными данными и не зависит от настроек magic_quotes . Фильтр очистки, FILTER_SANITIZE_MAGIC_QUOTES , поместит их, если они вам понадобятся.

Это было благом для меня лично, потому что я работаю в старой системе с magic_quotes . Используя filter_input() я могу использовать значения без необходимости filter_input() косые черты, прежде чем связывать их в PDO .

В этих статьях говорится об этом:
http://www.sitepoint.com/forums/showthread.php?590848-Filter_input-magic-quotes
https://weston.ruter.net/2013/10/22/revelations-about-filter_input/
http://php.net/manual/en/function.filter-input.php#99124

Обычно я использую что-то в следующих строках для нормализации входных данных против установки magic_quotes.

 function deslash (array $data) { foreach ($data as $key => $val) { $data [$key] = is_array ($val)? deslash ($val): stripslashes ($val); } return $data; } if ((!empty ($_POST)) && (get_magic_quotes_gpc ())) { $posted = deslash ($_POST); }