Parse & Build a Query
The League\Uri\Components\QueryString
is a userland PHP URI query parser and builder.
<?php
use League\Uri\Components\QueryString;
$pairs = QueryString::parse('module=home&action=show&page=๐');
// returns [
// ['module', 'home'],
// ['action', 'show'],
// ['page', '๐']
// ];
$str = QueryString::build($pairs, '|');
// returns 'module=home|action=show|page=๐'
Usage
Parsing the URI query string
Parsing a query string is easy.
$pairs = QueryString::parse('module=home&action=show&page=๐');
// returns [
// ['module', 'home'],
// ['action', 'show'],
// ['page', '๐']
// ];
Description
<?php
public static function QueryString::parse($query, string $separator = '&', int $enc_type = PHP_QUERY_RFC3986): array;
The returned array is a collection of key/value pairs. Each pair is represented as an array where the first element is the pair key and the second element the pair value. While the pair key is always a string, the pair value can be a string or the null
value.
The QueryString::parse
method parameters are:
$query
can be thenull
value, any scalar or object which is stringable;$separator
is a string; by default it is the&
character;$enc_type
is one of PHPโs constantPHP_QUERY_RFC3968
orPHP_QUERY_RFC1738
which represented the supported encoding algoritm- If you specify
PHP_QUERY_RFC3968
decoding will be done using RFC3986 rules; - If you specify
PHP_QUERY_RFC1738
decoding will be done using application/x-www-form-urlencoded rules;
- If you specify
Hereโs a simple example showing how to use all the given parameters:
<?php
$pairs = QueryString::parse(
'module=home:action=show:page=toto+bar&action=hide',
':',
PHP_QUERY_RFC1738
);
// returns [
// ['module', 'home'],
// ['action', 'show'],
// ['page', 'toto bar'],
// ['action', 'hide'],
// ];
Building the URI query string
To convert back the collection of key/value pairs into a valid query string or the null
value you can use the static public QueryString::build
method.
<?php
$pairs = QueryString::build([
['module', 'home'],
['action', 'show'],
['page', 'toto bar'],
['action', 'hide'],
], '|', PHP_QUERY_RFC3986);
// returns 'module=home|action=show|page=toto%20bar|action=hide';
Description
<?php
public static function QueryString::build(iterable $pairs, string $separator = '&', int $enc_type = PHP_QUERY_RFC3986): ?string;
The static public QueryString::build
method parameters are:
$pairs
an iterable structure containing a collection of key/pair pairs as describe in the returned array of theQueryString::parse
method.$separator
is a string; by default it is the&
character;$enc_type
is one of PHPโs constantPHP_QUERY_RFC3968
orPHP_QUERY_RFC1738
which represented the supported encoding algoritm- If you specify
PHP_QUERY_RFC3968
encoding will be done using RFC3986 rules; - If you specify
PHP_QUERY_RFC1738
encoding will be done using application/x-www-form-urlencoded rules;
- If you specify
- the function returns the
null
value if the submitted collection is empty.
Extracting PHP variables
<?php
public static function QueryString::extract($query, string $separator = '&', int $enc_type = PHP_QUERY_RFC3986): array;
public static function QueryString::convert(iterable $pairs): array;
QueryString::parse
and QueryString::build
preserve the query string pairs content and order. If you want to extract PHP variables from the query string ร la parse_str
you can use:
- The
QueryString::extract
method which takes the same parameters asQueryString::parse
- The
QueryString::convert
method which takes the result ofQueryString::parse
both methods, however, do not allow parameters key mangling in the returned array like parse_str
;
<?php
$query = 'module=show&arr.test[1]=sid&arr test[4][two]=fred&+module+=hide';
$params = QueryString::extract($query, '&', PHP_QUERY_RFC1738);
// $params contains [
// 'module' = 'show',
// 'arr.test' => [
// 1 => 'sid',
// ],
// 'arr test' => [
// 4 => [
// 'two' => 'fred',
// ]
// ],
// ' module ' => 'hide',
// ];
parse_str($query, $variables);
// $variables contains [
// 'module' = 'show',
// 'arr_test' => [
// 1 => 'sid',
// 4 => [
// 'two' => 'fred',
// ],
// ],
// 'module_' = 'hide',
// ];
Exceptions
All exceptions extends the League\Uri\Exceptions\UriException
marker class which extends PHPโs Throwable
class.
<?php
use League\Uri\Exception\InvalidUriComponent;
use League\Uri\Parser\QueryString;
try {
QueryString::extract('foo=bar', '&', 42);
} catch (UriException $e) {
//$e is an instanceof League\Uri\Exceptions\SyntaxError
}