Фильтрация данных
Содержание
- filter_has_var — Проверяет существование переменной указанного типа
- filter_id — Возвращает идентификатор, принадлежащий именованному фильтру
- filter_input_array — Принимает несколько переменных извне PHP и, при необходимости, фильтрует их
- filter_input — Принимает переменную извне PHP и, при необходимости, фильтрует ее
- filter_list — Возвращает список всех поддерживаемых фильтров
- filter_var_array — Принимает несколько переменных и, при необходимости, фильтрует их
- filter_var — Фильтрует переменную с помощью определенного фильтра
Коментарии
Also notice that filter functions are using only the original variable values passed to the script even if you change the value in super global variable ($_GET, $_POST, ...) later in the script.
<?php
echo filter_input(INPUT_GET, 'var'); // print 'something'
echo $_GET['var']; // print 'something'
$_GET['var'] = 'changed';
echo filter_input(INPUT_GET, 'var'); // print 'something'
echo $_GET['var']; // print 'changed'
?>
In fact, external data are duplicated in SAPI before the script is processed and filter functions don't use super globals anymore (as explained in Filter tutorial bellow, section 'How does it work?').
I recommend you to use the FILTER_REQUIRE_SCALAR (or FILTER_REQUIRE_ARRAY) flags, since you can use array-brackets both to access string offsets and array-element -- however, not only this can lead to unexpected behaviour. Look at this example:
<?php
$image = basename(filter_input(INPUT_GET, 'src', FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW));
// further checks
?>
/script.php?src[0]=foobar will cause a warning. :-(
Hence my recommendation:
<?php
$image = basename(filter_input(INPUT_GET, 'src', FILTER_UNSAFE_RAW, FILTER_REQUIRE_SCALAR | FILTER_FLAG_STRIP_LOW));
// further checks
?>