一.pase_str()函数介绍
实例
把查询字符串解析到变量中:
<?php
parse_str("name=Bill&age=60");
echo $name."<br>";
echo $age;
?>
定义和用法
parse_str() 函数把查询字符串解析到变量中。
注释:如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量。
注释:php.ini 文件中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。
语法
parse_str(string,array)
参数 | 描述 |
---|---|
string | 必需。规定要解析的字符串。 |
array | 可选。规定存储变量的数组的名称。该参数指示变量将被存储到数组中。 |
技术细节
返回值: | 无返回值。 |
PHP 版本: | 4+ |
更新日志: | 在 PHP 4.0.3 中,新增了 array 参数。 |
更多实例
例子 1
在数组中存储变量:
<?php
parse_str("name=Bill&age=60",$myArray);
print_r($myArray);
?>
二.自动对url编码解码
用法:void parse_str ( string $str [, array &$arr] )
parse_str用来解析(分离)URL中的查询字符串(Query String),所谓查询字符串是指一个URL中?后面的部分,如http://join158.cn /?k=php&p=1,则查询字符串就是“k=php&p=1”。
经过parse_str函数将接收的url参数格式化为数组:
array(
'k'=>'php',
'p'=>1
)
当然在PHP里,你可以用$_GET数组来取得查询字符串的值,但有时候parse_str会方便些,特别是当查询字符串中的变量名(对应于上面例子中的name和age)不知道的时候。
注:值得注意的是,parse_str函数将自动进行urldecode解码,如url串为"k=%E7%9A%84&p=1"的查询条件进过parse_str函数后为:
array(
'k'=>'的',
'p'=>1
)
三.自己写个代码测试一下
<?php
$a="I love you";
echo $_GET['b'];
echo "<br>";
parse_str($_GET['b']);
echo $a;
?>
在本地环境get下面的数据,其中%25CE%25D2%25B0%25AE%25C4%25E3是我爱你的两次url编码
?b=a=%25CE%25D2%25B0%25AE%25C4%25E3
结果为
a=%CE%D2%B0%AE%C4%E3
我爱你
分析一下
代码中$a的值起初为"I love you".
get数据后$_GET['b']为参数b的值,即为a=%CE%D2%B0%AE%C4%E3,发现传入的%25CE%25D2%25B0%25AE%25C4%25E3已经改变了,这是因为get方式的数据本身会进行一次url解码
然后数据a=%CE%D2%B0%AE%C4%E3再经过parse_str()函数的洗礼,再次进行一次url解码,且a被解析外变量$a,又因为parse_str()函数没有设置第二个参数,所以会覆改之前同名的变量(所以此函数有变量覆改漏洞),所以再次输出$a为我爱你