public static UrlHelper::parse($url)
Parses a URL string into its path, query, and fragment components.
This function splits both internal paths like
node?b=c#d
and external URLs like
https://example.com/a?b=c#d
into their component parts. See RFC 3986 for an explanation of what the component parts are.
Note that, unlike the RFC, when passed an external URL, this function groups the scheme, authority, and path together into the path component.
string $url: The internal path or external URL string to parse.
array An associative array containing:
\Drupal\Core\Utility\LinkGenerator
http://tools.ietf.org/html/rfc3986
public static function parse($url) { $options = array( 'path' => NULL, 'query' => array(), 'fragment' => '', ); // External URLs: not using parse_url() here, so we do not have to rebuild // the scheme, host, and path without having any use for it. if (strpos($url, '://') !== FALSE) { // Split off everything before the query string into 'path'. $parts = explode('?', $url); // Don't support URLs without a path, like 'http://'. list(, $path) = explode('://', $parts[0], 2); if ($path != '') { $options['path'] = $parts[0]; } // If there is a query string, transform it into keyed query parameters. if (isset($parts[1])) { $query_parts = explode('#', $parts[1]); parse_str($query_parts[0], $options['query']); // Take over the fragment, if there is any. if (isset($query_parts[1])) { $options['fragment'] = $query_parts[1]; } } } // Internal URLs. else { // parse_url() does not support relative URLs, so make it absolute. For // instance, the relative URL "foo/bar:1" isn't properly parsed. $parts = parse_url('http://example.com/' . $url); // Strip the leading slash that was just added. $options['path'] = substr($parts['path'], 1); if (isset($parts['query'])) { parse_str($parts['query'], $options['query']); } if (isset($parts['fragment'])) { $options['fragment'] = $parts['fragment']; } } return $options; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Component!Utility!UrlHelper.php/function/UrlHelper::parse/8.1.x