Главная страница » Статьи и уроки » PHP статьи » PHP: «Умная» проверка URL-адреса
Опрос
Вы занимаетесь разработкой сайтов?
Выделенные и виртуальные серверы в Европе

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

Автор: administrator Дата: 8-08-2018, 21:54 Категория: Статьи и уроки / PHP статьи
Довольно часто встречаются ситуации, когда нужно проверить на корректность 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)
{
    // Массив с компонентами URL, сгенерированный функцией parse_url()
    $arUrl = parse_url($url);
    // Возвращаемое значение. По умолчанию будет считать наш URL некорректным.
    $ret = null;

    // Если не был указан протокол, или
    // указанный протокол некорректен для url
    if (!array_key_exists("scheme", $arUrl)
            || !in_array($arUrl["scheme"], array("http", "https")))
        // Задаем протокол по умолчанию - http
        $arUrl["scheme"] = "http";

    // Если функция parse_url смогла определить host
    if (array_key_exists("host", $arUrl) &&
            !empty($arUrl["host"]))
        // Собираем конечное значение url
        $ret = sprintf("%s://%s%s", $arUrl["scheme"],
                        $arUrl["host"], $arUrl["path"]);

    // Если значение хоста не определено
    // (обычно так бывает, если не указан протокол),
    // Проверяем $arUrl["path"] на соответствие шаблона URL.
    else if (preg_match("/^\w+\.[\w\.]+(\/.*)?$/", $arUrl["path"]))
        // Собираем URL
        $ret = sprintf("%s://%s", $arUrl["scheme"], $arUrl["path"]);

    // Если url валидный и передана строка параметров запроса
    if ($ret && empty($ret["query"]))
        $ret .= sprintf("?%s", $arUrl["query"]);

    return $ret;
}


Теперь проверить корректность URL‐адреса, который ввел пользователь — проще простого.


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


Не забывайте должным образом обрабатывать данные, пришедшие от пользователя, если вы используете их при формировании запросов к БД. А еще лучше, переходите на prepared statements.
  • Не нравится
  • 0
  • Нравится
Просмотров: 1 383 Напечатать Жалоба
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
Написать комментарий
Ваше Имя:
Ваш E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Код: Кликните на изображение чтобы обновить код, если он неразборчив
Введите код: