Очистка и проверка введенных пользователем данных — одна из наиболее распространенных задач в веб-приложении. Чтобы упростить эту задачу в PHP есть встроенные фильтры, которое вы можете использовать для очистки или проверки данных, таких как адреса электронной почты, URL-адреса, IP-адреса и т. д.
Для проверки данных с помощью расширения фильтра вам необходимо использовать PHP-функцию filter_var()
. Базовый синтаксис этой функции может быть задан следующим образом:
filter_var(variable, filter, options)
Эта функция принимает три параметра, последние два из которых являются необязательными. Первый параметр — это значение, которое нужно отфильтровать, второй параметр — это идентификатор применяемого фильтра, а третий параметр — это массив параметров, связанных с фильтром. Посмотрим, как это работает.
Очистка строк
В следующем примере выполняется очистка строки путем удаления из нее всех HTML-тегов:
<?php
// Пример комментария пользователя
$comment = "<h1>Hey there! How are you doing today?</h1>";
// Очистка и печать строки комментария
$sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING);
echo $sanitizedComment; // Выводит: Hey there! How are you doing today?
?>
Проверка целочисленных значений
В следующем примере будет проверяться, является ли значение действительным целым числом или нет.
<?php
// Пример целочисленного значения
$int = 20;
// Проверка целочисленного значения
if(filter_var($int, FILTER_VALIDATE_INT)){
echo "Переменная <b>$int</b> является действительным целым числом";
} else{
echo "Переменная <b>$int</b> не является действительным целым числом";
}
?>
В приведенном выше примере, если переменная $int
установлена в 0, код примера отобразит, что это недопустимое целочисленное значение. Чтобы решить эту проблему, вам необходимо явно проверить значение 0, как показано ниже:
<?php
// Пример целочисленного значения
$int = 0;
// Проверка целочисленного значения
if(filter_var($int, FILTER_VALIDATE_INT) === 0 || filter_var($int, FILTER_VALIDATE_INT)){
echo "Переменная <b>$int</b> является действительным целым числом";
} else{
echo "Переменная <b>$int</b> не является действительным целым числом";
}
?>
Проверка IP-адреса
В следующем примере будет проверяться, является ли значение действительным IP-адресом или нет.
<?php
// Пример IP-адреса
$ip = "172.16.254.1";
// Проверка IP-адреса
if(filter_var($ip, FILTER_VALIDATE_IP)){
echo "Переменная <b>$ip</b> действительный IP-адрес";
} else {
echo "Переменная <b>$ip</b> не действительный IP-адрес";
}
?>
Вы можете дополнительно применить проверку для IP-адресов IPV4 или IPV6, используя флаги FILTER_FLAG_IPV4
и FILTER_FLAG_IPV6
соответственно. Вот пример:
<?php
// Пример IP-адреса
$ip = "172.16.254.1";
// Проверка IP-адреса
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
echo "Переменная <b>$ip</b> это действительный адрес IPV6";
} else {
echo "Переменная <b>$ip</b> не является действительным адресом IPV6";
}
?>
Очистка и проверка адреса электронной почты
В следующем примере показано, как очистить и проверить адрес электронной почты.
<?php
// Образец электронного адреса
$email = "someone@@example.com";
// Удаляем из электронной почты все недопустимые символы
$sanitizedEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
// Проверка адреса электронной почты
if($email == $sanitizedEmail && filter_var($email, FILTER_VALIDATE_EMAIL)){
echo "Переменная $email это действительный адрес электронной почты";
} else{
echo "Переменная $email не действительный адрес электронной почты";
}
?>
Фильтр FILTER_SANITIZE_EMAIL
удаляет все недопустимые символы из предоставленной строки адреса электронной почты, кроме букв, цифр и символов !#$%&'*+-=?^_`{|}~@.[]
.
Очистка и проверка URL-адреса
В следующем примере показано, как очистить и проверить URL-адрес.
<?php
// Пример URL-адреса веб-сайта
$url = "http:://www.example.com";
// Удаляем все недопустимые символы из URL
$sanitizedUrl = filter_var($url, FILTER_SANITIZE_URL);
// Проверка URL-адрес веб-сайта
if($url == $sanitizedUrl && filter_var($url, FILTER_VALIDATE_URL)){
echo "Переменная $url действительный URL-адрес веб-сайта";
} else{
echo "Переменная $url недействительный URL-адрес веб-сайта";
}
?>
Фильтр FILTER_SANITIZE_URL
удаляет все недопустимые символы из предоставленной строки URL, кроме букв, цифр и символов $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=
Вы также можете проверить, содержит ли URL-адрес строку запроса используя флаг FILTER_FLAG_QUERY_REQUIRED
, как показано в следующем примере:
<?php
// Пример URL-адреса веб-сайта
$url = "http://www.example.com?topic=filters";
// Проверяем URL-адрес веб-сайта для строки запроса
if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED)){
echo "Переменная <b>$url</b> содержит строку запроса";
} else{
echo "Переменная <b>$url</b> не содержит строку запроса";
}
?>
Подробнее см. Руководство по URL-адресам HTML, чтобы узнать о различных компонентах URL-адреса.
Проверка целых чисел в диапазоне
В следующем примере проверяется, является ли предоставленное значение целым числом или нет, а также находится ли оно в диапазоне от 0 до 100 или нет.
<?php
// Пример целочисленного значения
$int = 75;
// Проверка целочисленного значения
if(filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range" => 0,"max_range" => 100)))){
echo "Переменная <b>$int</b> находится в диапазоне от 0 до 100";
} else{
echo "Переменная <b>$int</b> is not within the range of 0 to 100";
}
?>