[ Index ]

PHP Cross Reference of phpBB-3.3.2-deutsch

title

Body

[close]

/vendor/guzzlehttp/psr7/src/ -> Query.php (source)

   1  <?php
   2  
   3  namespace GuzzleHttp\Psr7;
   4  
   5  final class Query
   6  {
   7      /**
   8       * Parse a query string into an associative array.
   9       *
  10       * If multiple values are found for the same key, the value of that key
  11       * value pair will become an array. This function does not parse nested
  12       * PHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2`
  13       * will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.
  14       *
  15       * @param string   $str         Query string to parse
  16       * @param int|bool $urlEncoding How the query string is encoded
  17       *
  18       * @return array
  19       */
  20      public static function parse($str, $urlEncoding = true)
  21      {
  22          $result = [];
  23  
  24          if ($str === '') {
  25              return $result;
  26          }
  27  
  28          if ($urlEncoding === true) {
  29              $decoder = function ($value) {
  30                  return rawurldecode(str_replace('+', ' ', $value));
  31              };
  32          } elseif ($urlEncoding === PHP_QUERY_RFC3986) {
  33              $decoder = 'rawurldecode';
  34          } elseif ($urlEncoding === PHP_QUERY_RFC1738) {
  35              $decoder = 'urldecode';
  36          } else {
  37              $decoder = function ($str) { return $str; };
  38          }
  39  
  40          foreach (explode('&', $str) as $kvp) {
  41              $parts = explode('=', $kvp, 2);
  42              $key = $decoder($parts[0]);
  43              $value = isset($parts[1]) ? $decoder($parts[1]) : null;
  44              if (!isset($result[$key])) {
  45                  $result[$key] = $value;
  46              } else {
  47                  if (!is_array($result[$key])) {
  48                      $result[$key] = [$result[$key]];
  49                  }
  50                  $result[$key][] = $value;
  51              }
  52          }
  53  
  54          return $result;
  55      }
  56  
  57      /**
  58       * Build a query string from an array of key value pairs.
  59       *
  60       * This function can use the return value of `parse()` to build a query
  61       * string. This function does not modify the provided keys when an array is
  62       * encountered (like `http_build_query()` would).
  63       *
  64       * @param array     $params   Query string parameters.
  65       * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986
  66       *                            to encode using RFC3986, or PHP_QUERY_RFC1738
  67       *                            to encode using RFC1738.
  68       * @return string
  69       */
  70      public static function build(array $params, $encoding = PHP_QUERY_RFC3986)
  71      {
  72          if (!$params) {
  73              return '';
  74          }
  75  
  76          if ($encoding === false) {
  77              $encoder = function ($str) { return $str; };
  78          } elseif ($encoding === PHP_QUERY_RFC3986) {
  79              $encoder = 'rawurlencode';
  80          } elseif ($encoding === PHP_QUERY_RFC1738) {
  81              $encoder = 'urlencode';
  82          } else {
  83              throw new \InvalidArgumentException('Invalid type');
  84          }
  85  
  86          $qs = '';
  87          foreach ($params as $k => $v) {
  88              $k = $encoder($k);
  89              if (!is_array($v)) {
  90                  $qs .= $k;
  91                  if ($v !== null) {
  92                      $qs .= '=' . $encoder($v);
  93                  }
  94                  $qs .= '&';
  95              } else {
  96                  foreach ($v as $vv) {
  97                      $qs .= $k;
  98                      if ($vv !== null) {
  99                          $qs .= '=' . $encoder($vv);
 100                      }
 101                      $qs .= '&';
 102                  }
 103              }
 104          }
 105  
 106          return $qs ? (string) substr($qs, 0, -1) : '';
 107      }
 108  }


Generated: Wed Nov 11 20:28:18 2020 Cross-referenced by PHPXref 0.7.1