php反序列化多组数据 php反序列化实战

php数据库数组反序列化取指定内容$str = 'a:2:{i:0;b:0;s:8:"bankinfo";a:1:{i:1;a:2{s:6:"bankid";i:1;s:7:"cardnum";s:4:"adda";}}}';
$res = unserialize($str);
echo $res['bankinfo'][1]['cardnum'];
这个数组整个结构是
Array (
[0] = false
[bankinfo] = Array (
[1] = Array (
[bankid] = 1
[cardnum] = adda
)
)
)
php的序列化和反序列化有什么好处?序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用 。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性 。
PHP中的序列化和反序列化分别通过函数serialize()和unserialize()即可实现 。serialize()的参数可以是resource类型外的所有变量类型,最常见的是用来序列化对象,unseialize()将serialize的返回结果作为参数,进行反序列化,得到原对象 。
在PHP中,序列化和反序列化很多地方都可以用到!~
例如:数据库连接 , 序列化数组等等 。
php中序列化与反序列化把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
eg:
结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ( [0] = Moe [1] = Larry [2] = Curly )
当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理:
margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据 。
如果magic_quotes_gpc项是启用的,那么在URL、POST变量以及cookies中传递的数据在反序列化之前必须用stripslashes()进行处理:
如果magic_quotes_runtime是启用的,那么在向文件中写入序列化的数据之前必须用addslashes()进行处理,而在读取它们之前则必须用stripslashes()进行处理:
当对一个对象进行反序列化操作时,PHP会自动地调用其__wakeUp()方法 。这样就使得对象能够重新建立起序列化时未能保留的各种状态 。例如:数据库连接等 。
JSON PHP中,Json字符串反序列化成对象/数组的方法如下所示:
?php
//php反编码解析json信息
//json_decode(json字符串);
$city
=
array('shandong'='jinan','henan'='zhengzhou','hebei'='shijiazhuang');
$jn_city
=
json_encode($city);
//反编码json
$fan_city
=
json_decode($jn_city,false);//第二个参数false则返回object类型php反序列化多组数据,false可以默认不写
var_dump($fan_city);//object(stdClass)#1
(3)
{
["shandong"]=
string(5)
"jinan"
["henan"]=
string(9)
"zhengzhou"
["hebei"]=
string(12)
"shijiazhuang"
}
echo
"br
/";
$fan_city
=
json_decode($jn_city,true);//第二个参数true则返回array类型
var_dump($fan_city);//array(3)
{
["shandong"]=
string(5)
"jinan"
["henan"]=
string(9)
"zhengzhou"
["hebei"]=
string(12)
"shijiazhuang"
}
手动写php反序列化多组数据的JSON字符串一定要用单引号才能成功反序列化成对象/数组:
?php
//json信息反编码
//不同php版本,对“纯json字符串”解析存在问题
//使用双引号定义的json字符串反编码操作变为null
//$jn
=
"{'name':'tom','age':'20','addr':'beijing'}";
//$fan_jn
=
json_decode($jn,true);
//var_dump($fan_jn);//NULL
//使用单引号定义的json字符串反编码操作会成功
$jn
=
'{"name":"tom","age":"20","addr":"beijing"}';
$fan_jn
=
json_decode($jn,true);
var_dump($fan_jn);
以上这篇JSON
PHP中,Json字符串反序列化成对象/数组的方法就是小编分享给大家的全部内容php反序列化多组数据了,希望能给大家一个参考,也希望大家多多支持脚本之家 。
您可能感兴趣的文章:C#实现JSON字符串序列化与反序列化的方法jquery序列化form表单使用ajax提交后处理返回的json数据js解析与序列化json数据(二)序列化探讨Json序列化和反序列化方法解析Jquery
组合form元素为json格式,asp.net反序列化jQuery实现form表单元素序列化为json对象的方法浅析JSON序列化与反序列化JS实现json的序列化和反序列化功能示例js解析与序列化json数据(三)json的解析探讨JavaScript实现的反序列化json字符串操作示例
请写出php变量序列化和反序列化的函数,并举出1个应用例子PHP中的序列化和反序列化分别通过函数serialize()和unserialize()即可实现 。serialize()的参数可以是resource类型外的所有变量类型,最常见的是用来序列化对象,unseialize()将serialize的返回结果作为参数,进行反序列化,得到原对象 。$str = serialize ($obj);...$obj222 = unserialize($str);现在可以用$object222对象来执行该对象可以执行的各种操作 。在用serialize序列化对象时,会自动调用__sleep方法,__sleep方法必须返回一个数组,包含需要串行化的属性 。PHP会抛弃其它属性的值,如果没有__sleep方法,PHP将保存所有属性,包括private属性 。用unserialize反序列化对象时,PHP 会调用__wakeup方法 。__sleep和__wakeup方法可以根据实际需要 , 都添加上,也可以只要其中的一个,当然也可以都不要 。下面给出一个序列化的代码:共serialize.php和unserialize.php两个文件 。// serialize.php?php
class User
{
private $name;
private $id;
public $sex="F";
function __construct()
{
//give user a unique ID 赋予一个不同的ID
$this-id = uniqid();
}
function __sleep()
{
//do not serialize this-id 不串行化id
return(array("name","sex"));
}
function __wakeup()
{
//give user a unique ID
$this-id = uniqid();
}
function p(){
echo "in function p() \t";
return $this-name;
}
function setname($name){
$this-name = $name;
}
} //create object 建立一个对象
$u = new User;
$u-setname("pphu");
//serialize it 串行化
$s = serialize($u);
echo "in serialize.php br/";
print_r($s);
echo "br/";
print_r($u);
echo "br/br/";
? //// unserialize.php?php
include('serialize.php');
//global $s;
$u2 = unserialize($s);
echo "in unserialize.phpbr/";
echo $u2-p()."br/";
echo $u2-sex."br/";
print_r($u2);
?
php如何循环反序列化?1.构造HITCON类反序列化字符串,其中$method='login',$args数组’username’部分可用于构造SQL语句,进行SQL注入,'password’部分任意设置 。
2.调用login()函数后,利用username构造联合查询 , 使查询结果为SoFun类反序列化字符串,设置username构造联合查询,使查询结果为SoFun类反序列化字符串,设置username构造联合查询 , 使查询结果为SoFun类反序列化字符串,设置file=‘flag.php’,需绕过__wakeup()函数 。
3.绕过oadData()函数对反序列化字符串的验证 。
4.SoFun类 __destruct()函数调用后,包含flag.php文件,获取flag,需绕过__wakeup()函数 。
【php反序列化多组数据 php反序列化实战】php反序列化多组数据的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php反序列化实战、php反序列化多组数据的信息别忘了在本站进行查找喔 。

    推荐阅读