在本文中,我们将探讨 PHP 中的 parse_str
函数。它用于将 GET 请求查询字符串转换为可用变量。
在日常 PHP 开发中,您经常需要处理查询字符串,即通过 GET 请求将数据传递到 URL 中的脚本的方式。当在 URL 中传递查询字符串时,PHP 提供超全局 $_GET
变量,其中包含所有查询参数作为 PHP 变量,因此您可以轻松读取查询字符串中可用的参数。但是,有时您需要处理原始查询字符串并将其转换为变量。
在 PHP 中,有几种不同的方法可以实现此目的。您可以使用 explode
函数将查询字符串按 &
字符拆分,然后再按 =
字符拆分。但还有一种更简单的方法:PHP 提供了 parse_str
函数,该函数允许您在一次调用中解析查询字符串。
今天,我们将详细讨论 parse_str
函数,以及几个实际示例。
语法:parse_str
函数
让我们看一下parse_str
函数的语法:
parse_str(string $string, array &$result): void
如您所见,parse_str
有两个参数。第一个参数是输入字符串,它应该是查询字符串格式,例如名称=威尔逊&颜色=blue
。
第二个参数是一个数组,它将由查询字符串中解析的变量填充。
需要注意的是,parse_str
函数不会返回任何内容,因此您必须使用第二个参数来初始化该函数的结果。在 PHP 7.2 之前,第二个参数是可选的,省略它会告诉 parse_str
将结果值作为本地范围内的变量返回,但从 PHP 7.2 开始,这是一个强制参数。
此外, parse_str
函数始终解码 URL 编码的变量,因此您不需要使用 urldecode
函数。除此之外,如果您有一个很长的输入查询字符串,它可能会抛出 input variables超过X
错误。在这种情况下,请检查 php.ini 配置文件中的 max_input_vars
配置值,并根据您的要求进行调整。
让我们在下一节中看几个现实世界的示例。
parse_str
在本节中,我们将通过几个实际示例来演示如何使用 parse_str
函数。
一个简单的例子
让我们从一个简单的示例开始,如以下代码片段所示。
<?php $string = 'first_name=John&last_name=Richards&age=30'; parse_str($string, $result); print_r($result); /** Output: Array ( [first_name] => John [last_name] => Richards [age] => 30 ) **/
如您所见, parse_str
函数解析 $string
查询字符串,并且 $result
填充有一个数组。变量名称被转换为数组键,变量值被分配给相应的数组键。
数组示例
很多时候,输入的查询字符串可能包含数组变量,parse_str
函数可以检测到它并将其转换为相应的数组变量。
<?php $string = 'foo=1&bar[]=1&bar[]=2'; parse_str($string, $result); print_r($result); /** $result Output: Array ( [foo] => 1 [bar] => Array ( [0] => 1 [1] => 2 ) ) **/
正如您在上面的示例中看到的,bar
变量在输入查询字符串中包含多个值,并且它被转换为相应的 $result['bar']
数组,如输出所示。
请注意,如果您在数组变量后不使用特殊的 []
语法,则 parse_str
会将其视为常规变量,并且仅保留字符串中的最后一个值。这与大多数查询字符串解析器的工作方式略有不同。
特殊字符示例
有时,输入查询字符串包含空格和点作为变量名称的一部分。但是,PHP 不允许变量名中包含空格和点,因此它们会被 parse_str
函数自动转换为下划线。
让我们看一下下面的示例来了解它是如何工作的。
<?php $string = 'my name=John&my.email=john@example.com'; parse_str($string, $result); print_r($result); /** $result Output: Array ( [my_name] => John [my_email] => john@example.com ) **/
如果您注意到,输入查询字符串变量中的空格和点字符将替换为数组键中的下划线 (_
) 字符。
URL 编码值示例
正如我们之前讨论的,parse_str
函数在解析期间始终对 URL 编码值进行解码。这意味着您不需要单独应用 urldecode
函数。
这是一个包含一些 URL 编码值的示例。
<?php $string = 'name=John%20Richards&profile_url=http%3A%2F%2Fexample.com%2Fmyprofile'; parse_str($string, $result); print_r($result); /** $result Output: Array ( [name] => John Richards [profile_url] => https://example.com/myprofile ) **/
如您所见,URL 编码的字符会自动转换为相应的字符。
结论
今天,我们讨论了 PHP 中的 parse_str
函数,该函数对于将查询字符串转换为变量非常有用。我希望您发现它对您自己的 PHP 编码很有用!
以上就是PHP中使用parse_str的方法的详细内容,更多请关注php中文网其它相关文章!