php parse_str()

一.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为我爱你

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值