Parse url: примеры (PHP)
parse_url(string $url, int $component = -1): array|int|string|false|nullФункция 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, если он отсутствует).
Разбор полного 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
)
- 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')); // testParse 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 8.0.0: Функция теперь выбрасывает исключение
ValueError, если параметрcomponentсодержит недопустимое значение (ранее возвращалсяnull). - PHP 7.4.0: Функция теперь возвращает
nullдля компонентаport, если он присутствует в URL, но не является целым числом. Ранее возвращался номер порта как целое число, а некорректный порт приводил кnull. - PHP 5.4.7: Исправлена обработка IPv6-адресов в квадратных скобках.
Разбор строки запроса в сочетании с parse_str():
$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:
$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 защищенный протокол:
function isSecureUrl($url) {
$scheme = parse_url($url, PHP_URL_SCHEME);
return ($scheme === 'https');
}
echo isSecureUrl('https://bank.com') ? 'Secure' : 'Not Secure';Secure
Построение базового URL (схема, хост, порт):
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