WordPress как на ладони
Мощный и не дорогой хостинг от Fornex.com

wp_parse_url() WP 4.4.0

Разбирает переданный URL на компоненты. Унифицирует работу PHP функции parse_url() (обёртка для неё).

Что именно делает функция:

  • Стандартизирует (унифицирует) работу parse_url() и удаляет компонент scheme, если URL указан без протокола (начинается с //). Правильное определение хоста для ссылки без протокола было исправлено для parse_url() в версии PHP 5.4.7.

  • Стандартизирует (унифицирует) работу parse_url() и удаляет компоненты scheme и host, если указан относительный URL (без протокола и хоста, который начинается с /).

  • Подавляет ошибки возвращаемые parse_url(). До PHP 5.3.3 parse_url() создавал ошибку уровня E_WARNING, когда не мог разобрать URL.

C версии 4.7.0. был добавлен параметр $component (для соответствия PHP функции parse_url()).

Работает на основе: _get_component_from_parsed_url_array()
✈ 1 раз = 0.000001с = скорость света | 50000 раз = 0.07с = скорость света | PHP 7.2.5, WP 5.0

Хуков нет.

Возвращает

string/integer/array/false/null.

Когда не указан компонент:

  • false - при ошибке разбора;
  • array - массив компонентов URL при успешном разборе.

Когда указан компонент:

  • null - компонент отсутствует в переданном URL;
  • строка/число - значение компонента URL (число вернется для компонента PHP_URL_PORT).

Подробнее о возвращаемых данных смотрите в описании parse_url().

Использование

wp_parse_url( $url, $component );
$url(строка) (обязательный)
URL для разбора.
$component(число)

Компонент URL для извлечения. Вместо числа можно использовать одну из предопределенных констант PHP:

PHP_URL_SCHEME
PHP_URL_HOST
PHP_URL_PORT
PHP_URL_USER
PHP_URL_PASS
PHP_URL_PATH
PHP_URL_QUERY
PHP_URL_FRAGMENT

По умолчанию: -1 (возвращает все части массива)

Примеры

#1 Демонстрация работы

$url = 'https://domain.com/path?arg=value#anchor';

$parts = wp_parse_url( $url );
print_r( $parts );
/*
$parts = Array (
	[scheme]   => https
	[host]     => domain.com
	[path]     => /path
	[query]    => arg=value
	[fragment] => anchor
)
*/
echo wp_parse_url( $url, PHP_URL_SCHEME );   // https
echo wp_parse_url( $url, PHP_URL_HOST );     // domain.com
echo wp_parse_url( $url, PHP_URL_PATH );     // /path
echo wp_parse_url( $url, PHP_URL_QUERY );    // arg=value
echo wp_parse_url( $url, PHP_URL_FRAGMENT ); // anchor

Пример разбора всех возможных параметров URL:

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

$parts = wp_parse_url( $url );
/*
$parts = Array (
	[scheme]   => http
	[host]     => hostname
	[port]     => 9090
	[user]     => username
	[pass]     => password
	[path]     => /path
	[query]    => arg=value
	[fragment] => anchor
)
*/
echo wp_parse_url( $url, PHP_URL_SCHEME );   // http
echo wp_parse_url( $url, PHP_URL_HOST );     // hostname
echo wp_parse_url( $url, PHP_URL_PORT );     // 9090
echo wp_parse_url( $url, PHP_URL_USER );     // username
echo wp_parse_url( $url, PHP_URL_PASS );     // password
echo wp_parse_url( $url, PHP_URL_PATH );     // /path
echo wp_parse_url( $url, PHP_URL_QUERY );    // arg=value
echo wp_parse_url( $url, PHP_URL_FRAGMENT ); // anchor

#2 Парсинг URL при отсутствии протокола

$url = '//www.example.com/path?googleguy=googley';
$url_parts = wp_parse_url( $url );

/* 
$url_parts = Array (
	[host] => www.example.com
	[path] => /path
	[query] => googleguy=googley
)
*/

Код wp_parse_url: wp-includes/http.php VER 5.0.1

<?php
function wp_parse_url( $url, $component = -1 ) {
	$to_unset = array();
	$url = strval( $url );

	if ( '//' === substr( $url, 0, 2 ) ) {
		$to_unset[] = 'scheme';
		$url = 'placeholder:' . $url;
	} elseif ( '/' === substr( $url, 0, 1 ) ) {
		$to_unset[] = 'scheme';
		$to_unset[] = 'host';
		$url = 'placeholder://placeholder' . $url;
	}

	$parts = @parse_url( $url );

	if ( false === $parts ) {
		// Parsing failure.
		return $parts;
	}

	// Remove the placeholder values.
	foreach ( $to_unset as $key ) {
		unset( $parts[ $key ] );
	}

	return _get_component_from_parsed_url_array( $parts, $component );
}

Cвязанные функции

Из метки: URL (УРЛ Ссылка)

Еще из раздела: Вспомогательные

mihdan 403kobzarev.com
Тимлид, программист. WordPress-евангелист, веду канал в VK по WordPress - https://vk.com/wordpress_digest
Редакторы: Kama 7144
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться