You are here

public static function Request::normalizeQueryString in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/http-foundation/Request.php \Symfony\Component\HttpFoundation\Request::normalizeQueryString()

Normalizes a query string.

It builds a normalized query string, where keys/value pairs are alphabetized, have consistent escaping and unneeded delimiters are removed.

Parameters

string $qs Query string:

Return value

string A normalized query string for the Request

2 calls to Request::normalizeQueryString()
Request::getQueryString in vendor/symfony/http-foundation/Request.php
Generates the normalized query string for the Request.
Request::overrideGlobals in vendor/symfony/http-foundation/Request.php
Overrides the PHP global variables according to this request instance.

File

vendor/symfony/http-foundation/Request.php, line 643

Class

Request
Request represents an HTTP request.

Namespace

Symfony\Component\HttpFoundation

Code

public static function normalizeQueryString($qs) {
  if ('' == $qs) {
    return '';
  }
  $parts = array();
  $order = array();
  foreach (explode('&', $qs) as $param) {
    if ('' === $param || '=' === $param[0]) {

      // Ignore useless delimiters, e.g. "x=y&".
      // Also ignore pairs with empty key, even if there was a value, e.g. "=value", as such nameless values cannot be retrieved anyway.
      // PHP also does not include them when building _GET.
      continue;
    }
    $keyValuePair = explode('=', $param, 2);

    // GET parameters, that are submitted from a HTML form, encode spaces as "+" by default (as defined in enctype application/x-www-form-urlencoded).
    // PHP also converts "+" to spaces when filling the global _GET or when using the function parse_str. This is why we use urldecode and then normalize to
    // RFC 3986 with rawurlencode.
    $parts[] = isset($keyValuePair[1]) ? rawurlencode(urldecode($keyValuePair[0])) . '=' . rawurlencode(urldecode($keyValuePair[1])) : rawurlencode(urldecode($keyValuePair[0]));
    $order[] = urldecode($keyValuePair[0]);
  }
  array_multisort($order, SORT_ASC, $parts);
  return implode('&', $parts);
}