English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как очищать и проверять ввод пользователя в PHP.
Очистка и проверка ввода пользователя является одной из самых распространенных задач в веб-приложениях. Чтобы упростить эту задачу, PHP предоставляет вектор фильтрации, который можно использовать для очистки или проверки данных, таких как адрес электронной почты, URL, адрес IP и т.д.
Чтобы использовать расширение фильтра для проверки данных, вам нужно использовать функцию filter_var() в PHP. Основной синтаксис этой функции можно представить следующим образом:
filter_var(variable, filter, options)
Эта функция имеет три параметра, из которых последние два являются опциональными. Первый параметр - это значение, которое нужно фильтровать, второй параметр - это ID фильтра, который нужно применить, а третий параметр - это массив опций, связанных с фильтром. Давайте посмотрим, как это работает.
В следующем примере показано, как можно очистить строку, удалив все HTML-теги из нее:
<?php // Пример комментария пользователя $comment = "<h1>Эй! Как у тебя сегодня?</h1>"; // Очистка и вывод строки комментария $sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING); echo $sanitizedComment; ?>Тестировать посмотрим‹/›
Вывод примера выше выглядит следующим образом:
Эй! Как у тебя сегодня?
В следующем примере проверяется, является ли это значение действительным целым числом.
<?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 "The <b>$int</b> является действительным целым числом"; } else { echo "The <b>$int</b> не является действительным целым числом"; } ?>Тестировать посмотрим‹/›
Ниже приведен пример проверки того, является ли это значение действительным IP адресом.
<?php //IP адрес $ip = "172.16.254.1"; //Пример проверки примерного IP адреса if(filter_var($ip, FILTER_VALIDATE_IP)){ echo "<b>$ip</b> является действительным IP адресом"; } echo "<b>$ip</b> не является действительным IP адресом"; } ?>Тестировать посмотрим‹/›
Вы можете использовать флаги FILTER_FLAG_IPV4 или FILTER_FLAG_IPV6 для применения проверки к адресам IPV4 или IPV6. Вот пример:
<?php //IP адрес $ip = "172.16.254.1"; //Пример проверки примерного IP адреса if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ echo "<b>$ip</b> является действительным адресом IPV6"; } 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.
<?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 являетсяvalidным веб-сайтом"; } else { echo "$url не являетсяvalidным веб-сайтом"; } ?>Тестировать посмотрим‹/›
Внимание:Фильтр FILTER_SANITIZE_URL удаляет все недопустимые символы, кроме букв, цифр и предоставленной строки URL $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
Вы также можете использовать флаг, чтобы проверить, содержит ли URL строку запроса FILTER_FLAG_QUERY_REQUIRED, как показано в следующем примере:
<?php // url $url = "http://www.example.com?topic=filters"; // Проверка веб-сайта на наличие строки запроса if (filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED)) { echo "<b>$url</b> содержит строку запроса"; } else { echo "<b>$url</b> не содержит строку запроса"; } ?>Тестировать посмотрим‹/›
Пожалуйста, обратитесь кHTML URLУчебник, чтобы узнать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> не находится в диапазоне от 0 до 100"; } ?>Тестировать посмотрим‹/›