Parse url: примеры (PHP)

Функция parse_url для анализа URL адресов в PHP
Раздел: URL
parse_url(string $url, int $component = -1): array|int|string|false|null
Функция parse_url в PHP

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

Аргументы функции
  • url (string) – Обязательный параметр. Строка, содержащая URL для разбора. Может быть относительным или абсолютным.
  • component (int) – Необязательный параметр. Одна из констант PHP_URL_* (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 в виде строки (или null, если он отсутствует).
Примеры использования parse_url

Разбор полного URL с получением массива:

$url = 'https://user:pass@example.com:8080/path/to/page?name=John&age=30#section';
$components = parse_url($url);
print_r($components);
Array
(
[scheme] => https
[host] => example.com
[port] => 8080
[user] => user
[pass] => pass
[path] => /path/to/page
[query] => name=John&age=30
[fragment] => section
)

Получение только одного компонента, например, хоста:

$host = parse_url($url, PHP_URL_HOST);
echo $host;
example.com

Анализ URL без схемы и с относительным путем:

$url2 = '//example.com/path';
$res = parse_url($url2);
print_r($res);
Array
(
[host] => example.com
[path] => /path
)
Похожие функции в PHP
  • parse_str() – Разбирает строку запроса (query string) в переменные или массив. Полезна для обработки компонента query, извлеченного функцией parse_url().
  • pathinfo() – Возвращает информацию о пути к файлу (dirname, basename, extension, filename). Может использоваться совместно с компонентом path от parse_url() для анализа пути.
  • http_build_query() – Генерирует URL-кодированную строку запроса из массива. Выполняет обратную операцию для компонента query.
  • filter_var() с FILTER_VALIDATE_URL – Валидация URL. Функция parse_url() не проверяет корректность URL, она только разбирает его структуру. Для проверки существования URL лучше подходит filter_var().
Альтернативы в других языках

Parse url в Python

Модуль urllib.parse предоставляет функцию urlparse(), которая возвращает именованный кортеж.

from urllib.parse import urlparse
result = urlparse('https://example.com/path?q=test')
print(result.scheme)
print(result.netloc)
https
example.com

Parse url в Javascript

В браузерном JavaScript объект URL позволяет разбирать и конструировать URL.

const url = new URL('https://example.com/path?q=test');
console.log(url.hostname); // example.com
console.log(url.searchParams.get('q')); // test

Parse url в MySQL

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

Типичные ошибки

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

$result = parse_url('not a valid url');
var_dump($result);
bool(false)

Непонимание возвращаемого значения при запросе одного компонента. Если компонент отсутствует, функция вернет null.

$url = 'https://example.com';
$port = parse_url($url, PHP_URL_PORT);
var_dump($port);
NULL

Разница в поведении с относительными и абсолютными URL.

$rel = '/path/to/file';
$abs = parse_url($rel);
print_r($abs);
Array
(
[path] => /path/to/file
)
Изменения в последних версиях PHP
  • PHP 8.0.0: Функция теперь выбрасывает исключение ValueError, если параметр component содержит недопустимое значение (ранее возвращался null).
  • PHP 7.4.0: Функция теперь возвращает null для компонента port, если он присутствует в URL, но не является целым числом. Ранее возвращался номер порта как целое число, а некорректный порт приводил к null.
  • PHP 5.4.7: Исправлена обработка IPv6-адресов в квадратных скобках.
Расширенные примеры

Разбор строки запроса в сочетании с parse_str():

Пример php
$url = 'https://example.com/?cat=1&tag=php&sort=date';
$queryString = parse_url($url, PHP_URL_QUERY);
parse_str($queryString, $params);
print_r($params);
Array
(
[cat] => 1
[tag] => php
[sort] => date
)

Извлечение имени файла из пути в URL:

Пример php
$url = 'https://example.com/articles/php-8-features.html';
$path = parse_url($url, PHP_URL_PATH);
$filename = basename($path);
echo $filename;
php-8-features.html

Проверка, использует ли URL защищенный протокол:

Пример php
function isSecureUrl($url) {
$scheme = parse_url($url, PHP_URL_SCHEME);
return ($scheme === 'https');
}
echo isSecureUrl('https://bank.com') ? 'Secure' : 'Not Secure';
Secure

Построение базового URL (схема, хост, порт):

Пример php
function getBaseUrl($url) {
$scheme = parse_url($url, PHP_URL_SCHEME);
$host = parse_url($url, PHP_URL_HOST);
$port = parse_url($url, PHP_URL_PORT);
$base = ($scheme ? $scheme . '://' : '');
$base .= $host;
if ($port) $base .= ':' . $port;
return $base;
}
echo getBaseUrl('https://example.com:8080/path/file');
https://example.com:8080

PHP parse_url function comments

En
Parse url Parse a URL and return its components