Фильтры в PHP
Часто веб-приложения оперируют с данными, получеными извне:
- Пользовательский ввод из формы
- cookies
- Данные от веб-сервисов
- Переменные сервера
- Результаты запроса к базе данных
Такие данные необходимо тщательно проверять перед использованием и чистить. Фильтры PHP используются для проверки и дезинфекции внешнего ввода.
Расширение фильтра PHP
Расширение фильтра PHP имеет много функций, необходимых для проверки пользовательского ввода, и предназначено для упрощения и ускорения проверки данных.
Функция filter_list()
может использоваться для перечисления тех возможностей, которые предлагают фильтры PHP.
Пример
Попробуй сам »<table>
<tr>
<td>Имя фильтра</td>
<td>ID фильтра</td>
</tr>
<?php
foreach (filter_list() as $id =>$filter) {
echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
}
?>
Функция PHP filter_var()
Функция filter_var()
фильтрует переменную с помощью указанного фильтра. Эта функция используется как для проверки, так и для очистки данных.
Синтаксис
Параметры функции filter_var():
var
- Обязательный. Переменная, которую вы хотите проверить.
filtername
- Необязательный. Используется для указания идентификатора или имени используемого фильтра. Если не указан, то используется
FILTER_DEFAULT
, который равнозначенFILTER_UNSAFE_RAW
. Это значит, что по умолчанию не применяется никакого фильтра. options
- Необязательный. Используется для указания одного или нескольких флагов/параметров для использования.
Очистить строку от html-тегов
В следующем примере функция filter_var()
используется для удаления всех HTML-тегов из строки:
Пример
Попробуй сам »<?php
$str = "<h1>Привет Мир!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
Проверить целое число
Параметр FILTER_VALIDATE_INT
используется для проверки, являются ли данные, переданные фильтру filter_var()
, допустимым целочисленным значением. В приведенном ниже скрипте будет отображаться TRUE
для переменной $value01, и будет выведено FALSE
для переменной $value02 (поскольку дробные числа/десятичные числа не являются целыми):
Пример
Попробуй сам »<?php
$value01 = '123456';
if(filter_var($value01,FILTER_VALIDATE_INT)) {
echo 'TRUE';
} else {
echo 'FALSE';
}
echo '<br><br>';
$value02 = '123.456';
if(filter_var($value02,FILTER_VALIDATE_INT)) {
echo 'TRUE';
} else {
echo 'FALSE';
}
?>
Проверить целое число, равное 0
В приведенном выше примере, если $int было установлено в 0, функция выше вернет FALSE
. Чтобы решить эту проблему, используйте приведенный ниже код:
Пример
Попробуй сам »<?php
$int = 0;
if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Целое число действительно");
} else {
echo("Целое число недействительно");
}
?>
Проверка IP-адреса
Параметр FILTER_VALIDATE_IP
используется для проверки, являются ли данные, переданные фильтру filter_var()
, потенциально допустимым IP-адресом. В приведенном ниже скрипте будет отображаться TRUE
для переменной $value01, и будет выведено FALSE
для переменной $value02 (поскольку её значение не соответствует требуемой структуре данных для IP-адресов):
Пример
Попробуй сам »<?php
$value01 = '192.168.0.1';
if(filter_var($value01,FILTER_VALIDATE_IP)) {
echo 'TRUE';
} else {
echo 'FALSE';
}
echo '<br><br>';
$value02 = '1.2.3.4.5.6.7.8.9';
if(filter_var($value02,FILTER_VALIDATE_IP)) {
echo 'TRUE';
} else {
echo 'FALSE';
}
?>
Очистить и проверить адрес электронной почты
Параметр FILTER_SANITIZE_EMAIL
используется для удаления любых символов, которые недействительны в адресах электронной почты (например, скобки, угловые скобки, двоеточия и т.д.). Например, допустим, вы случайно добавили круглые скобки вокруг символа вашего адреса электронной почты:
Пример
Попробуй сам »<?php
$value = 't(e)st@example.com';
echo filter_var($value, FILTER_SANITIZE_EMAIL);
?>
Фильтр удаляет эти круглые скобки и возвращает валидный адрес электронной почты.
Очистить и проверить URL-адрес
Параметр FILTER_SANITIZE_URL
действует аналогично фильтру очистки адреса электронной почты. Он удаляет любые символы, которые недействительны в URL (например, некоторые символы UTF-8 и т.д.). Предположим, что вы случайно добавили «®» в URL вашего сайта:
Пример
Попробуй сам »<?php
$value = 'https://wm-sho®ol.ru';
echo filter_var($value, FILTER_SANITIZE_URL);
?>
Фильтр удаляет символ «®» и возвращает валидный URL.
Примечание: Фильтр FILTER_SANITIZE_URL
удаляет все недопустимые символы из предоставленной строки URL-адреса, кроме букв, цифр и $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=
.