PHP parse_url и её обратная функция

parse_url($url, $component) – разбирает URL-адрес на компоненты, возвращая их в виде массива. При разборе некорректных URL, функция может вернуть false.

Структура URL адреса
$url = 'https://snipp.ru/php/parse-url?page=1&sort=1#sample';
$parse = parse_url($url);
print_r($parse);
PHP

Результат:

Array
(
    [scheme] => https
    [host] => snipp.ru
    [path] => /php/parse-url
    [query] => page=1&sort=1
    [fragment] => sample
)

C помощью второго параметра функции, можно получить конкретный компонент URL, указав его константу:

$url = 'https://snipp.ru/php/parse-url?page=1&sort=1#sample';

echo parse_url($url, PHP_URL_SCHEME);    // https
echo parse_url($url, PHP_URL_HOST);      // snipp.ru
echo parse_url($url, PHP_URL_PORT);      // NULL
echo parse_url($url, PHP_URL_USER);      // NULL
echo parse_url($url, PHP_URL_PASS);      // NULL
echo parse_url($url, PHP_URL_PATH);      // /php/parse-url
echo parse_url($url, PHP_URL_QUERY);     // page=1&sort=1
echo parse_url($url, PHP_URL_FRAGMENT);  // sample
PHP

Кстати, GET-параметры будут представлены строкой вида page=1&sort=1, преобразовать ее в массив можно с помощью функции parse_str():

parse_str('page=1&sort=1', $query);
print_r($query);
PHP

Результат:

Array
(
    [page] => 1
    [sort] => 1
)

Обратное преобразование массива в GET-строку:

echo http_build_query($query);  // page=1&sort=1
PHP

Следующая функция собирает полученный массив в URL (reverse parse url).

function reverse_parse_url(array $parts)
{
	$url = '';
	if (!empty($parts['scheme'])) {
		$url .= $parts['scheme'] . ':';
	}
	if (!empty($parts['user']) || !empty($parts['host'])) {
		$url .= '//';
	}	
	if (!empty($parts['user'])) {
		$url .= $parts['user'];
	}	
	if (!empty($parts['pass'])) {
		$url .= ':' . $parts['pass'];
	}
	if (!empty($parts['user'])) {
		$url .= '@';
	}	
	if (!empty($parts['host'])) {
		$url .= $parts['host'];
	}
	if (!empty($parts['port'])) {
		$url .= ':' . $parts['port'];
	}	
	if (!empty($parts['path'])) {
		$url .= $parts['path'];
	}	
	if (!empty($parts['query'])) {
		if (is_array($parts['query'])) {
			$url .= '?' . http_build_query($parts['query']);
		} else {
			$url .= '?' . $parts['query'];
		}
	}	
	if (!empty($parts['fragment'])) {
		$url .= '#' . $parts['fragment'];
	}
	
	return $url;
}
PHP

Удаление из URL GET-параметров:

$url = 'https://snipp.ru/php/parse-url?page=1&sort=1#sample';
$parse = parse_url($url);

unset($parse['query']);
echo reverse_parse_url($parse); // https://snipp.ru/php/parse-url#sample
PHP

Замена домена:

$url = 'https://snipp.ru/php/parse-url?page=1&sort=1#sample';
$parse = parse_url($url);

$parse['host'] = 'example.com';
echo reverse_parse_url($parse); // https://example.com/php/parse-url?page=1&sort=1#sample
PHP
17.07.2019, обновлено 17.01.2021
10271

Комментарии

, чтобы добавить комментарий.

Другие публикации

Преобразование цветов HEX и RGB в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
9664
+1
Получить GET-параметр из URL
Иногда нужно быстро получить GET-параметр из строки с URL, в этом поможет PHP функция parse_url().
13311
+1
Подключение к платежной системе Сбербанка
После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с...
38136
+18
Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
6456
+1
Работа с JSON в PHP
JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и...
58848
+10
Преобразование punycode в PHP
Punycode – это специальная кодировка, используется для преобразования символов Unicode в ASCII для кодирования интернационализированных доменных имен (IDN).
4635
0