Фильтрация данных встроенными фильтрами PHP

Фильтрация данных встроенными фильтрами PHP

От автора: При создании сайтов или веб-приложений, так или иначе, необходимо фильтровать данные, полученные от пользователя. В первую очередь, это необходимо для обеспечения безопасности, а также для хранения данных в правильном формате. Для этого в версии 5.2 интерпретатора языка PHP была добавлена секция фильтр, что позволяет как фильтровать, так и очищать входные данные. Поэтому в данном уроке мы рассмотрим функции, которые позволяют выполнять фильтрацию данных, а также непосредственно доступные фильтры.

скачать исходникискачать урок

Функции для фильтрации

Первым делом хотел бы отметить, что для использования функций фильтров, Вам необходим интерпретатор языка PHP версии 5.2 и выше. Ознакомиться с официальной документацией по встроенным фильтрам можно по ссылке //php.net/manual/ru/book.filter.php.

Начнем изучение с функции filter_list(), которая вернет массив имен доступных фильтров.

В результате мы получим следующий массив:

Далее мы можем получить идентификатор интересующего фильтра, передав его имя в функцию filter_id(), которая возвращает идентификатор, принадлежащий именованному фильтру. Конечно, все идентификаторы сохранены в специальных константах, но если Вы забыли имя константы, функция filter_id(), Вам очень пригодится. К примеру, узнаем идентификатор фильтра number_int:

В результате мы получим число 519 – это соответствует значению константы FILTER_SANITIZE_NUMBER_INT.

При фильтрации, постоянно приходится работать с внешними данными, поэтому изначально необходимо проверить, были ли они переданы. Внешние данные, переданные в скрипт, сохраняются в одном из суперглобальных массивов, к примеру $_POST, или $_GET. Функция filter_has_var() — проверяет существование переменной указанного типа, и возвращает истину в случае успеха.

Где, $type – тип переменной, который равен одной из следующих констант INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER (переменная из массива $_POST, $_GET, $_COOKIE, $_SERVER соответственно), string $variable_name – имя переменной (ячейки соответствующего массива).

Следующие функции, которые предстоит рассмотреть, работают непосредственно с фильтрами, поэтому предлагаю изучать их вместе.

Фильтры валидации данных

Для фильтрации значения переменной переданной из вне, используется функция filter_input($type , $variable_name, $filter = FILTER_DEFAULT, $options), которая принимает внешнюю переменную и, при необходимости, фильтрует ее. Аргументы функции:

$type – тип переменной (равен значению одной из констант рассмотренных выше);

$variable_name – имя интересующей переменной (ячейка суперглобального массива);

$filter – идентификатор фильтра.

$options – массив опций, который может содержать параметры и флаги, необходимые для настройки фильтра. Для указания флага, необходимо создать ячейку flags, для указания параметров – options.

К примеру, создадим небольшую форму:

В обработчике, отфильтруем значение, которое передается через текстовое поле string:

Как Вы видите я вызвал на исполнение функцию filter_input(), и передал третьим параметром фильтр FILTER_VALIDATE_BOOLEAN, который возвращает TRUE для значений «1», «true», «on» и «yes», иначе возвращает FALSE. Соответственно если в форме ввести значение 1 – на экране мы увидим строку YES. Если передать в массив
$options флаг FILTER_NULL_ON_FAILURE – фильтр будет возвращать NULL вместо FALSE.

Фильтр валидации email

FILTER_VALIDATE_EMAIL – фильтр возвращает TRUE, если проверяемое значение, является валидным email адресом.

Фильтр валидации числа с плавающей точкой

FILTER_VALIDATE_FLOAT – фильтр возвращает TRUE, если передаваемое значение – это правильное число, с плавающей точкой. Данный фильтр поддерживает один флаг FILTER_FLAG_ALLOW_THOUSAND, который разрешает использование разделителей тысяч (по умолчанию это ,).

Фильтр валидации целочисленных значений

FILTER_VALIDATE_INT — Проверяет, что значение является корректным целым числом, и, при необходимости, входит в определенный диапазон. Поддерживает два флага FILTER_FLAG_ALLOW_OCTAL и FILTER_FLAG_ALLOW_HEX, которые разрешают использование чисел восьмеричной и шестнадцатеричной, соответственно, систем исчисления. Помимо этого, фильтр принимает два параметра, то есть диапазон чисел, который должно удовлетворять проверяемое значение.

Если в текстовую форму ввести число в диапазоне от 3 до 10, как результат мы получим YES.

Фильтр валидации IP адреса

FILTER_VALIDATE_IP – возвращает истину, если проверяемое значение соответствует IP адресу. Поддерживает следующие флаги:

FILTER_FLAG_IPV4 – IP адрес должен соответствовать адресу формата IPV4;

FILTER_FLAG_IPV6 — IP адрес должен соответствовать адресу формата IPV6;

FILTER_FLAG_NO_PRIV_RANGE – адрес не должен соответствовать диапазону локальных адресов;

FILTER_FLAG_NO_RES_RANGE — запрещает успешное прохождение проверки для зарезервированных адресов.

Фильтр соответствия шаблону регулярного выражения

FILTER_VALIDATE_REGEXP – проверяет, соответствует ли проверяемое значение шаблону регулярного выражения, который передан в массив $options (ячейка ‘regexp’):

В данном примере, проверку пройдет строка, состоящая только из цифр.

Фильтр валидации URL

FILTER_VALIDATE_URL – проверяет, соответствует ли строка URL адресу. Поддерживает два флага: FILTER_FLAG_PATH_REQUIRED – URL, обязательно должен содержать полный путь (то есть вместе с доменом сайта, должно быть имя выполняемого файла) и FILTER_FLAG_QUERY_REQUIRED – строка URL, обязательно должна содержать строку с GET параметрами.

С фильтрами валидации, мы закончили, теперь давайте рассмотрим еще одну функцию, которая позволяет выполнять проверку не одной переменной, а целого массива.

Аргументы функции:

$type – тип проверяемой переменной (дин из INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER);

$definition – массив, определяющий условия фильтрации.

К примеру, если мы передаем методом POST две переменные – number и summ, то для валидации данных полей с помощью функции filter_input_array(), необходимо:

Как Вы видите, в функцию, первым параметром, мы передаем константу INPUT_POST, то есть, ожидаем данные, которые будут отправлены запросом POST. А так же создаем массив $def, количество ячеек которого совпадает с количеством ячеек массива $_POST, к тому же имена ячеек так же совпадают с именами массива $_POST.

Фильтры очистки данных

Перед изучением фильтров данной группы, изучим последние две функции, фильтрации данных.

Функция filter_var() – фильтрует переменную с помощью определенного типа и возвращает отфильтрованные данные. Первым параметром необходимо передать имя переменной, которую нужно отфильтровать, вторым – идентификатор фильтра, третьим – массив опций.

К примеру, для фильтрации переменной $number = 5, необходимо выполнить следующее (то есть данная переменная должна содержать только целое число в диапазоне от 1 до 7):

И вторая функция — filter_var_array ($data, $definition, $add_empty), по своей работе полностью аналогична функции filter_input_array(), за исключением того, что фильтруется массив переменных скрипта.

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

Фильтр очистки email

FILTER_SANITIZE_EMAIL – удаляет символы, которые недопустимы в email адресах, а именно удаляет все символы, кроме букв, цифр и !#$%&’*+-/=?^_{|}~@.[]. К примеру:

Фильтр кодирования символов

FILTER_SANITIZE_ENCODED - кодирует строку в формат URL, а также при необходимости удаляет или кодирует специальные символы.

Флаги: FILTER_FLAG_STRIP_LOW – удаляет символы ANCII код, которых меньше 32, FILTER_FLAG_STRIP_HIGH – удаляет символы ANCII код, которых больше 122, FILTER_FLAG_ENCODE_LOW– кодирует символы ANCII код, которых меньше 32, FILTER_FLAG_ENCODE_HIGH – кодирует символы ANCII код, которых больше 122.

Фильтр экранирования кавычек

FILTER_SANITIZE_MAGIC_QUOTES – при использовании данного фильтра вызывается функция addslashes().

Фильтры очистки чисел

FILTER_SANITIZE_NUMBER_FLOAT – фильтрует числа с плавающей точкой, а именно удаляет все символы, кроме цифр, +- и, при необходимости, .,eE. Поддерживаются флаги: FILTER_FLAG_ALLOW_FRACTION – точка разделяющая дробную и целую часть не удаляется, FILTER_FLAG_ALLOW_THOUSAND – разделитель тысяч не удаляется FILTER_FLAG_ALLOW_SCIENTIFIC – символы eE – не удаляются.

FILTER_SANITIZE_NUMBER_INT - удаляются все символы, кроме цифр и знаков плюса и минуса.

Фильтры очистки строк

FILTER_SANITIZE_SPECIAL_CHARS – фильтр экранирует HTML-символы '"<>& и символы с ASCII-кодом, меньшим 32, при использовании флагов удаляет или кодирует остальные специальные символы. Поддерживаются флаги: FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_HIGH.

FILTER_SANITIZE_FULL_SPECIAL_CHARS – полностью аналогичен работе функции htmlspecialchars(). Для отключения кодирования кавычек, необходимо использовать флаг FILTER_FLAG_NO_ENCODE_QUOTES.

FILTER_SANITIZE_STRING – данный фильтр удаляет и при использовании флагов, удаляет или кодирует специальные символы. Поддерживает следующие флаги: FILTER_FLAG_NO_ENCODE_QUOTES, FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP. Последний флаг экранирует знак &.
FILTER_SANITIZE_URL – фильтр все символы, которые нельзя использовать в URL, то есть все символы, кроме букв, цифр и $-_.+!*'(),{}|\\^~[]
<>#%»;/?:@&=.

Вот собственно и все, что я хотел Вам сказать в данном уроке. Всего Вам доброго, удачного кодирования и до новых средств!!!

Метки: ,

Похожие статьи:

Комментарии Вконтакте:

Комментарии (3)