function UrlHelper::buildQuery
Parses an array into a valid query string encoded with rawurlencode().
Function 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.
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 string encoded with rawurlencode() which can be used as or appended to the URL query string.
Related topics
33 calls to UrlHelper::buildQuery()
- AssetOptimizationTest::invalidExclude in core/
tests/ Drupal/ FunctionalTests/ Asset/ AssetOptimizationTest.php  - Adds an invalid 'exclude' query parameter with an invalid value.
 - AssetOptimizationTest::invalidInclude in core/
tests/ Drupal/ FunctionalTests/ Asset/ AssetOptimizationTest.php  - Replaces the 'include' query parameter with an invalid value.
 - AssetOptimizationTest::omitInclude in core/
tests/ Drupal/ FunctionalTests/ Asset/ AssetOptimizationTest.php  - Removes the 'include' query parameter from the given URL.
 - AssetOptimizationTest::omitTheme in core/
tests/ Drupal/ FunctionalTests/ Asset/ AssetOptimizationTest.php  - Removes the 'theme' query parameter from the given URL.
 - AssetOptimizationTest::replaceGroupDelta in core/
tests/ Drupal/ FunctionalTests/ Asset/ AssetOptimizationTest.php  - Replaces the delta in the given URL.
 
File
- 
              core/
lib/ Drupal/ Component/ Utility/ UrlHelper.php, line 42  
Class
- UrlHelper
 - Helper class URL based methods.
 
Namespace
Drupal\Component\UtilityCode
public static function buildQuery(array $query, $parent = '') {
  $params = [];
  foreach ($query as $key => $value) {
    $key = $parent ? $parent . rawurlencode('[' . $key . ']') : rawurlencode($key);
    // Recurse into children.
    if (is_array($value)) {
      $params[] = static::buildQuery($value, $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);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.