parse_url

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_urlРазбирает URL-адрес и возвращает компоненты адреса

Описание

parse_url(string $url, int $component = -1): int|string|array|null|false

Функция разбирает URL-адрес и возвращает ассоциативный массив, который содержит компоненты URL-адреса, которые адрес представляет. Значения элементов массива не URL-декодируются.

Функция не проверяет корректность URL-адреса, а только разбивает адрес на части. Функция parse_url() также принимает неполные и недопустимые URL-адреса и попытается их разобрать.

Предостережение

Функция иногда даёт неправильные результаты для относительных или недействительных URL-адресов, и результаты иногда даже не соответствуют стандартному поведению HTTP-клиентов. При разборе URL-адресов из ненадежных входных данных требуется дополнительная проверка наподобие той, которая проводится функцией filter_var() с фильтром FILTER_VALIDATE_URL.

Список параметров

url

URL-адрес, который требуется разобрать.

component

Константы из следующего списка помогают получить только конкретный компонент URL-адреса в виде строки (string): PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY или PHP_URL_FRAGMENT. Исключение — константа PHP_URL_PORT, с которой значение возврата будет принадлежать типу int.

Возвращаемые значения

При разборе неправильных URL-адресов, в формате которых допустили серьёзные ошибки, функция parse_url() иногда возвращает значение false.

Функция вернёт ассоциативный массив (array), если параметр component опустили. Массив представит по крайней мере один элемент. Ключи, которые будет содержать массив, если функция обнаружит в URL-адресе компоненты, которые соответствуют названиям ключей:

  • scheme — схема наподобие http
  • host
  • port
  • user
  • pass
  • path
  • query — часть адреса после знака вопроса ?, но до символа решетки
  • fragment — часть адреса после символа # — идентификатора фрагмента или якоря

С параметром component функция parse_url() вернёт вместо массива (array) строку (string), или число (int), если указали константу PHP_URL_PORT. Функция вернёт значение null, если URL-адрес не содержит компонент, который запросили. Начиная с PHP 8.0.0 функция parse_url() различает запросы и фрагменты, которые не содержатся в адресе или оказались пустыми:

http://example.com/foo → query = null, fragment = null
http://example.com/foo? → query = "",   fragment = null
http://example.com/foo# → query = null, fragment = ""
http://example.com/foo?# → query = "",   fragment = ""

Раньше в каждом случае запрос и фрагмент равнялись null.

Обратите внимание, что управляющие символы в компонентах заменяются подчёркиванием — _. Подробнее об управляющих символах рассказывает описание функции ctype_cntrl().

Список изменений

Версия Описание
8.0.0 Функция parse_url() теперь различит запросы и фрагменты, которые не содержатся в адресе или пусты.

Примеры

Пример #1 Пример разбора URL-адреса функцией parse_url()

<?php

$url
= 'http://username:password@hostname:9090/path?arg=value#anchor';

var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));

?>

Результат выполнения приведённого примера:

array(8) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(8) "hostname"
  ["port"]=>
  int(9090)
  ["user"]=>
  string(8) "username"
  ["pass"]=>
  string(8) "password"
  ["path"]=>
  string(5) "/path"
  ["query"]=>
  string(9) "arg=value"
  ["fragment"]=>
  string(6) "anchor"
}
string(4) "http"
string(8) "username"
string(8) "password"
string(8) "hostname"
int(9090)
string(5) "/path"
string(9) "arg=value"
string(6) "anchor"

Пример #2 Пример разбора функцией parse_url() URL-адреса без схемы

<?php

$url
= '//www.example.com/path?googleguy=googley';

// До 5.4.7 функция показывала элемент path как "//www.example.com/path"
var_dump(parse_url($url));

?>

Результат выполнения приведённого примера:

array(3) {
  ["host"]=>
  string(15) "www.example.com"
  ["path"]=>
  string(5) "/path"
  ["query"]=>
  string(17) "googleguy=googley"
}

Примечания

Замечание:

Функцию разработали только для разбора URL-адресов, а не URI-идентификаторов, но чтобы соответствовать требованиям обратной совместимости PHP, функция делает исключение для схемы file://, в которой допускаются тройные слеши — file:///.... Для любой другой схемы это недопустимо.

Смотрите также

  • pathinfo() - Возвращает информацию о пути к файлу
  • parse_str() - Разбирает строку в переменные
  • http_build_query() - Генерирует URL-кодированную строку запроса
  • dirname() - Возвращает путь к родительскому каталогу
  • basename() - Возвращает конечный компонент имени пути
  • » Стандарт RFC 3986