league / uri-query-parser
1.0.1
2019-04-16 16:31 UTC
Requires
- php: ^7.1.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.3
- phpstan/phpstan: ^0.11.1
- phpstan/phpstan-phpunit: ^0.11.0
- phpstan/phpstan-strict-rules: ^0.11.0
- phpunit/phpunit: ^7.0 | ^8.0
Suggests
- league/uri-components: Manipulate URI components using modern API
- league/uri-parser: RFC3986 compliant URI parser
README
此包自2019年10月18日起处于维护模式,对于任何新项目,请考虑使用league/uri-components v2+
此包包含一个用户空间的PHP uri查询解析器和构建器。
<?php use League\Uri\Parser\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=😓'
系统需求
您需要
- PHP >= 7.1.3,但建议使用PHP的最新稳定版本
安装
$ composer require league/uri-query-parser
文档
解析/构建算法保留对顺序,并使用JavaScript UrlSearchParams相同的算法
解析URI查询字符串
解析查询字符串很简单。
<?php use League\Uri\Parser\QueryString; $pairs = QueryString::parse('module=home&action=show&page=😓'); // returns [ // ['module', 'home'], // ['action', 'show'], // ['page', '😓'] // ];
描述
<?php public static function QueryString::parse($query, string $separator = '&', int $enc_type = PHP_QUERY_RFC3986): array;
返回的数组是键/值对的集合。每个对表示为一个数组,其中第一个元素是键,第二个元素是值。虽然键总是字符串,但值可以是字符串或null值。
League\Uri\QueryString::parse
参数包括:
$query
可以是null值,任何可转换为字符串的标量或对象;$separator
是字符串;默认情况下是&字符;$enc_type
是PHP的常量之一PHP_QUERY_RFC3968
或PHP_QUERY_RFC1738
,表示支持的编码算法- 如果您指定
PHP_QUERY_RFC3968
,则解码将使用RFC3986规则; - 如果您指定
PHP_QUERY_RFC1738
,则解码将使用application/x-www-form-urlencoded规则;
- 如果您指定
以下是一个简单示例,展示如何使用所有给定参数:
<?php use League\Uri\QueryString; $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'], // ];
构建URI查询字符串
要将键/值对的集合转换回有效的查询字符串或null值,可以使用QueryString::build函数。
<?php use League\Uri\Parser\QueryString; $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';
描述
<?php public static function QueryString::build(iterable $pairs, string $separator = '&', int $enc_type = PHP_QUERY_RFC3986): ?string;
QueryString::build
- 接受任何包含键/值对集合的可迭代结构,如QueryString::parse函数返回的数组所述。
就像与QueryString::parse一样,您可以指定分隔符和要使用的编码算法。
- 如果给定的输入是空数组或集合,则函数返回null值。
提取PHP变量
<?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
和 QueryString::build
保留查询字符串对的内容和顺序。如果您想像 parse_str
一样从查询字符串中提取PHP变量,可以使用
- 具有与
League\Uri\QueryString::parse
相同参数的QueryString::extract
方法 - 具有
League\Uri\QueryString::parse
结果的QueryString::convert
方法
但是,这两种方法都不允许在返回的数组中进行参数键混淆,就像 parse_str
一样;
<?php use League\Uri\Parser\QueryString; $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', // ];
异常
所有异常都扩展了 League\Uri\Parser\InvalidUriComponent
标记类,该类扩展了PHP的 InvalidArgumentException
类。
- 如果查询字符串无效,将抛出
League\Uri\Exception\MalformedUriComponent
异常。 - 如果查询对无效,将抛出
League\Uri\Parser\InvalidQueryPair
异常。 - 如果编码算法未知或无效,将抛出
League\Uri\Parser\UnknownEncoding
异常。
<?php use League\Uri\Exception\InvalidUriComponent; use League\Uri\Parser\QueryString; try { QueryString::extract('foo=bar', '&', 42); } catch (InvalidUriComponent $e) { //$e is an instanceof League\Uri\Parser\UnknownEncoding }
贡献
欢迎贡献,并将完全予以认可。请参阅CONTRIBUTING 和 CONDUCT 获取详细信息。
测试
该库有一个
- PHPUnit 测试套件
- 一个使用 PHP CS Fixer 的编码风格合规性测试套件。
- 一个使用 PHPStan 的代码分析合规性测试套件。
要运行测试,请从项目文件夹中运行以下命令。
$ composer test
安全
如果您发现任何与安全相关的问题,请通过电子邮件nyamsprod@gmail.com联系,而不是使用问题跟踪器。
致谢
许可
MIT 许可证(MIT)。请参阅许可文件获取更多信息。