You are here

public static function UrlHelper::parse in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/lib/Drupal/Component/Utility/UrlHelper.php \Drupal\Component\Utility\UrlHelper::parse()

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.

Parameters

string $url: The internal path or external URL string to parse.

Return value

array An associative array containing:

  • path: The path component of $url. If $url is an external URL, this includes the scheme, authority, and path.
  • query: An array of query parameters from $url, if they exist.
  • fragment: The fragment component from $url, if it exists.

See also

\Drupal\Core\Utility\LinkGenerator

http://tools.ietf.org/html/rfc3986

Related topics

16 calls to UrlHelper::parse()
ConfirmFormHelper::buildCancelLink in core/lib/Drupal/Core/Form/ConfirmFormHelper.php
Builds the cancel link for a confirmation form.
FieldPluginBase::renderAsLink in core/modules/views/src/Plugin/views/field/FieldPluginBase.php
Render this field as a link, with the info from a fieldset set by the user.
FieldUI::getNextDestination in core/modules/field_ui/src/FieldUI.php
Returns the next redirect path in a multipage sequence.
file_create_url in core/includes/file.inc
Creates a web-accessible URL for a stream to an external or local file.
FormBuilder::buildFormAction in core/lib/Drupal/Core/Form/FormBuilder.php
Builds the $form['#action'].

... See full list

File

core/lib/Drupal/Component/Utility/UrlHelper.php, line 141
Contains \Drupal\Component\Utility\UrlHelper.

Class

UrlHelper
Helper class URL based methods.

Namespace

Drupal\Component\Utility

Code

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];
      }
    }
  }
  else {

    // parse_url() does not support relative URLs, so make it absolute. E.g. 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;
}