PHP разбить ссылку (на домен, параметры, строка запроса и т.д.)


Часто, при написании парсеров на PHP или других программ для работы с ссылками, необходимо разбить эти самые ссылки на составные части. Нужно определить какая ссылка (абсолютная или относительная), указана с "www." или без, с "http://" или без и т.д.

Тут на помощь приходят регулярные выражения. Но этот вариант не самый простой. Получается множество проверок и условий, массивные регулярные выражения и т.д.

Для решения данной ситуации, в PHP 5 появилась функция parse_url(string URL).

parse_url() - возвращает аcсоциативный массив содержащий следующие элементы:

  • scheme - http, https, ftp и т.д.
  • host - сам домен (site.ru)
  • port - если в строке имеется порт (сокет) то в этом параметре сидит его номер
  • user - иногда в строке указывается имя пользователя (например http://user:pass@host)
  • pass - тут как и в предыдущем примере, только показывается пароль
  • path - вся строка, без домена
  • query- все параметры в виде строки, находящиеся после знака "?"
  • fragment -фрагмент находящийся, после знака "#"

Теперь посмотрим как функция работает:

<?
$url = 'http://lavrik-v.ru/site/contact.html#anchor';

$parse_url = parse_url($url);

echo '<pre>';
print_r($parse_url);
echo '</pre>';
?>

Результат будет следующий:

Array
(
    [scheme] => http
    [host] => lavrik-v.ru
    [path] => /site/contact.html
    [fragment] => anchor
)

У данной функции есть ещё один формат записи. Можно вторым параметром указать одну из следующих констант.

  • PHP_URL_SCHEME - протокол
  • PHP_URL_HOST - домен
  • PHP_URL_PORT - порт
  • PHP_URL_USER - пользователь
  • PHP_URL_PASS - пароль
  • PHP_URL_PATH - строка запроса без домена
  • PHP_URL_QUERY - строка с параметрами

В этом случае функция вернёт только одну строку (или в случае PHP_URL_PORT - integer) содержащую указанную переменную.

<?
$url = 'http://lavrik-v.ru/site/contact.html#anchor';
echo parse_url($url, PHP_URL_HOST);
?>

На экране получим:

lavrik-v.ru

Вот так, не прибегая к регулярным выражениям, можно легко разбить url на отдельные составляющие.

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика