wp_parse_url() WP 4.4.0

Розбирає надісланий URL на компоненти. Уніфікує роботу PHP функції parse_url() (обгортка для неї).

Що саме робить функція:

  • Стандартизує (уніфікує) роботу parse_url() і дає змогу вказати:

    • URL без протоколу (починається з //).
    • Відносний URL (починається з /).

    Правильне визначення хоста посилання без протоколу було виправлено для parse_url() у версії PHP 5.4.7.

  • Пригнічує помилки, що повертаються parse_url() . До PHP 5.3.3 parse_url() створював помилку рівня E_WARNING, коли не міг розібрати URL.

З версії 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

Хуків немає.

Повертає

Разное.

Коли компонент не вказано:

  • array– масив компонентів URL за успішного аналізу.
  • false– при помилці аналізу.

Коли вказано компонент:

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

Докладніше про дані, що повертаються, дивіться в описі 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 (повертає всі частини масиву)

Приклади

0

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

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

$parts = wp_parse_url($url);

/*
$parts = Array (
	[scheme] => https
	[host] => example.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 ); // example.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
0

#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
)
*/
0

#3 Парсинг URL за відсутності домену

$parts = wp_parse_url( '/no-dom?param=1#anchor' );

/*
Array (
	[path] => /no-dom
	[query] => param=1
	[fragment] => anchor
)
*/

список змін

З версії 4.4.0Введено.
З версії 4.7.0$component parameter був added for parity with PHP’s parse_url () .

Код wp_parse_url() WP 6.0.2

function wp_parse_url( $url, $component = -1 ) {
	$to_unset = array();
	$url = (string) $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);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *