Умная» проверка URL-адреса в PHP

2 ответ(ов) в теме
Stanislavovich
не в сети давно
На сайте с 19.12.2013
Участник
0
00:07

Довольно часто встречаются ситуации, когда нужно проверить на корректность URL-адрес, введенный пользователем. При этом, хорошо было бы не обременять самого пользователя вводом протокола http/https, но предоставить ему такую возможность.
То есть, «правильным» должен считаться, как URL, вида http://example.com/, так и example.com. В случае, если протокол не был указан, по умолчанию к конечному значению добавляется http://.
Создадим функцию parse_url_if_valid, которая будет принимать «сырую» строку URL, и возвращать корректный URL в том случае, если его удалось привести к должному виду. В противном случае, функция будет возвращать значение null.
В PHP есть встроенная функция parse_url, которая разбирает URL-адрес и возвращает массив с его компонентами. Воспользуемся ей для облегчения задачи и уменьшения количества рутинных операций.
function parse_url_if_valid($url)<br>{<br> // Массив с компонентами URL, сгенерированный функцией parse_url()<br> $arUrl = parse_url($url);<br> // Возвращаемое значение. По умолчанию будет считать наш URL некорректным.<br> $ret = null;<br><br> // Если не был указан протокол, или<br> // указанный протокол некорректен для url<br> if (!array_key_exists("scheme", $arUrl)<br> || !in_array($arUrl["scheme"], array("http", "https")))<br> // Задаем протокол по умолчанию - http<br> $arUrl["scheme"] = "http";<br><br> // Если функция parse_url смогла определить host<br> if (array_key_exists("host", $arUrl) &&<br> !empty($arUrl["host"]))<br> // Собираем конечное значение url<br> $ret = sprintf("%s://%s%s", $arUrl["scheme"],<br> $arUrl["host"], $arUrl["path"]);<br><br> // Если значение хоста не определено<br> // (обычно так бывает, если не указан протокол),<br> // Проверяем $arUrl["path"] на соответствие шаблона URL.<br> else if (preg_match("/^w+.[w.]+(/.*)?$/", $arUrl["path"]))<br> // Собираем URL<br> $ret = sprintf("%s://%s", $arUrl["scheme"], $arUrl["path"]);<br><br> // Если url валидный и передана строка параметров запроса<br> if ($ret && empty($ret["query"]))<br> $ret .= sprintf("?%s", $arUrl["query"]);<br><br> return $ret;<br>}

Теперь проверить корректность URL‐адреса, который ввел пользователь — проще простого.
if (!empty($_POST['site-url']) {<br> $url = parse_url_if_valid($_POST['site-url']);<br> if (!$url) {<br> // Введен некорректный URL<br> echo "Введите валидный адрес сайта";<br> exit();<br> } else {<br> // Работаем с полученным значением, как нам удобно.<br> echo "Ваш url: " . $url;<br> }<br>}

Не забывайте должным образом обрабатывать данные, пришедшие от пользователя, если вы используете их при формировании запросов к БД

Редакции сообщения
0
Stanislavovich
не в сети давно
На сайте с 19.12.2013
Участник
0
00:10

Полезная вещь для веб мастеров давно хотел выложить

Редакции сообщения
0

Ваше имя *

Ваш E-mail *

не публикуется

Текст сообщения *