array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.parse-url.php', 1 => 'parse_url', ), 'up' => array ( 0 => 'ref.url.php', 1 => 'Функции URL', ), 'prev' => array ( 0 => 'function.http-build-query.php', 1 => 'http_build_query', ), 'next' => array ( 0 => 'function.rawurldecode.php', 1 => 'rawurldecode', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/url/functions/parse-url.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
parse_url — Разбирает URL и возвращает его компоненты
Эта функция разбирает URL и возвращает ассоциативный массив, содержащий все компоненты URL, которые в нём присутствуют. Элементы массива не будут декодированы как URL.
Эта функция не предназначена для проверки на корректность данного URL, она только разбивает его на нижеперечисленные части. Частичные и недопустимые URL также принимаются, parse_url() пытается сделать всё возможное, чтобы разобрать их корректно.
url
URL для разбора.
component
Укажите одну из констант PHP_URL_SCHEME
,
PHP_URL_HOST
, PHP_URL_PORT
,
PHP_URL_USER
, PHP_URL_PASS
,
PHP_URL_PATH
, PHP_URL_QUERY
или PHP_URL_FRAGMENT
, чтобы получить только конкретный компонент
URL в виде строки (string). Исключением является указание
PHP_URL_PORT
, в этом случае возвращаемое значение
будет типа int.
При разборе значительно некорректных URL-адресов parse_url() может вернуть false
.
Если параметр component
будет опущен, функция возвратит
ассоциативный массив (array). В массиве будет находиться по крайней мере один элемент.
Возможные ключи в этом массиве:
?
#
Если параметр component
определён,
функция parse_url() вернёт строку (string)
(или число (int), в случае PHP_URL_PORT
)
вместо массива (array).
Если запрошенный компонент не существует в данном URL, будет возвращён null
.
Начиная с 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 Пример использования 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() при отсутствии протокола
<?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-адресов и результаты могут даже не соответствовать общему поведению HTTP-клиентов.
Если необходимо проанализировать URL-адреса из ненадёжных входных данных, потребуется дополнительная проверка,
например, с помощью filter_var() с фильтром FILTER_VALIDATE_URL
.
Замечание:
Эта функция предназначена специально для разбора URL-адресов, а не URI. Однако, чтобы соответствовать требованиям обратной совместимости PHP, она делает исключение для протокола file://, в которой допускаются тройные слеши (file:///...). Для любого другого протокола это недопустимо.