public static function UrlHelper::buildQuery

public static UrlHelper::buildQuery(array $query, $parent = '')

Parses an array into a valid, rawurlencoded query string.

rawurlencode() is RFC3986 compliant, and as a consequence RFC3987 compliant. The latter defines the required format of "URLs" in HTML5. urlencode() is almost the same as rawurlencode(), except that it encodes spaces as "+" instead of "%20". This makes its result non compliant to RFC3986 and as a consequence non compliant to RFC3987 and as a consequence not valid as a "URL" in HTML5.

@todo Remove this function once PHP 5.4 is required as we can use just http_build_query() directly.

Parameters

array $query: The query parameter array to be processed; for instance, \Drupal::request()->query->all().

string $parent: (optional) Internal use only. Used to build the $query array key for nested items. Defaults to an empty string.

Return value

string A rawurlencoded string which can be used as or appended to the URL query string.

Related topics

PHP wrapper functions
Functions that are wrappers or custom implementations of PHP functions.

File

core/lib/Drupal/Component/Utility/UrlHelper.php, line 45

Class

UrlHelper
Helper class URL based methods.

Namespace

Drupal\Component\Utility

Code

public static function buildQuery(array $query, $parent = '') {
  $params = array();

  foreach ($query as $key => $value) {
    $key = ($parent ? $parent . '[' . rawurlencode($key) . ']' : rawurlencode($key));

    // Recurse into children.
    if (is_array($value)) {
      $params[] = static::buildQuery($value, $key);
    }
    // If a query parameter value is NULL, only append its key.
    elseif (!isset($value)) {
      $params[] = $key;
    }
    else {
      // For better readability of paths in query strings, we decode slashes.
      $params[] = $key . '=' . str_replace('%2F', '/', rawurlencode($value));
    }
  }

  return implode('&', $params);
}

© 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::buildQuery/8.1.x