WordPress at a glance

wp_parse_url() WP 4.4.0

Parses a URL and returns its components. A wrapper for PHP's parse_url() function that handles consistency in the return values across PHP versions.

What the function does:

  • PHP 5.4.7 expanded parse_url()'s ability to handle non-absolute url's, including schemeless and relative url's with :// in the path. This function works around those limitations providing a standard output on PHP 5.2~5.4+.

  • Secondly, across various PHP versions, schemeless URLs starting containing a : in the query are being handled inconsistently. This function works around those differences as well.

  • Error suppression is used as prior to PHP 5.3.3, an E_WARNING would be generated when URL parsing failed.

Since 4.7.0 The $component parameter was added for parity with PHP's parse_url()

✈ 1 time = 0.000001s = speed of light | 50000 times = 0.07s = speed of light | PHP 7.2.5, WP 5.0

No Hooks.

Return

string/integer/array/false/null.

If the component is not specified:

  • array of URL components — on success.
  • false — on parse failure.

If the component is specified:

  • string/integer — the value of the component (an integer is returned for PHP_URL_PORT).
  • null — the component doesn't exist in the given URL.

See parse_url()'s return values.

Usage

wp_parse_url( $url, $component );
$url(string) (required)
The URL to parse.
$component(int)

The specific component to retrieve. Use one of the PHP predefined constants to specify which one:

PHP_URL_SCHEME
PHP_URL_HOST
PHP_URL_PORT
PHP_URL_USER
PHP_URL_PASS
PHP_URL_PATH
PHP_URL_QUERY
PHP_URL_FRAGMENT

Default: -1 (= return all parts as an array)

Examples

#1 Basic example

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

$parts = wp_parse_url( $url );

/*
$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

Retrieve all possible components:

$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 Parse a URL without a scheme

$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
)
*/

Code of wp parse url: wp-includes/http.php WP 5.2.2

<?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 );
}

Related Functions

From tag: Link (URL)

More from category: Helper Functions

No comments
    Hello, !     Log In . Register