25 марта 2011 г.

PHP: Проверка URL-адреса

Задача: необходимо проверить на валидность и существование URL, который отправляется пользователем через форму на сайте.

Для решения этой задачи написал простую функцию проверки, которую собственно и привожу ниже:

/**
     * Функция проверки URL
     *
     * @param  string $url
     * @return boolean
     */

    function checkUrl($url) {
  
        if (empty($url)) {
            return false;
        }        

        // проверяем строку на присутствие в ее начале 
        // протокола (http://|ftp://)
        if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
            $url = "http://" . $url;
        }

        // проверяем строку на присутствие в ней         
        // валидного URL'а
        if (preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url)) {
            // далее проверяем URL на существование...
            // нет необходимости полностью загружать сайт,
            // поэтому проверям только заголовки 
            return @get_headers($url);
        }

        return false;
    }

2 комментария:

  1. Анонимный20 июня 2012 г., 22:36

    А если сайт на домене рф или адрес набран заглавными?

    ОтветитьУдалить
    Ответы
    1. Не так много руских доменов...
      1. Для меня рф тока знакома других даже незнаю.
      2. И нечего сложного нет чтоб пересмотреть регулярку [a-z0-9] на [a-zA-Zа-яеёА-ЯЕЁ0-9] как то так взял из головы, примеров много...
      Это тоже можно (:[0-9]+) на (:[0-6]+) длинее не встречал хотя это не очень важно смысл http = (от 0 = до 4).
      Тут тебе и заглавные,гласные,согласные, как хош понемай!
      А если не понемаеш, зачем спрашивать... тока показал себя (плохое слово),

      Удалить