Php反序列化(php的序列化操作生成的哪种格式),本文通过数据整理汇集了Php反序列化(php的序列化操作生成的哪种格式)相关信息,下面一起看看。
序列化是将变量转换成可以保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串转换成原来的变量。这两个过程的结合可以方便地存储和传输数据,使程序更易于维护。
序列化是将变量转换成可以保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串转换成原来的变量。这两个过程的结合可以方便地存储和传输数据,使程序更易于维护。
1.序列化和反序列化函数
这两个函数通常用于在PHP中序列化和反序列化数据。
$a=数组( a=苹果, b=香蕉, c=椰子);
//序列化数组
$s=序列化($ a);
echo $ s;
//输出结果:A:3:{ S:1:“A”;s:5:“苹果”;s:1:“b”;s:6:“香蕉”;s:1:“c”;生:7:“椰子”;}
回声
;
//反序列化
$o=取消序列化($ s);
print _ r($ o);
//输出结果数组([a]=苹果[b]=香蕉[c]=椰子)
?
当数组值包含双引号、单引号或冒号等字符时,在反序列化后可能会出现问题。为了克服这个问题,一个聪明的技巧是使用base64_encode和base64_decode。
$ obj=array();
//序列化
$ s=base64 _ encode(serialize($ obj));
//反序列化
$ original=unserialize(base64 _ decode($ s));
但是base64编码会增加字符串的长度。为了克服这个问题,它可以与gz compression一起使用。
//定义一个函数来序列化对象
函数my_serialize( $obj)
{
返回base64 _ encode(gz compress(serialize($ obj)));
}
//反序列化
函数my_unserialize($txt)
{
return unserialize(gzun compress(base64 _ decode($ txt)));
}
2.json_encode和json_decode
使用JSON格式的序列化和反序列化是一个不错的选择:
json_encode和json_decode格式的输出比序列化和反序列化格式的输出快得多。
JSON格式是可读的。
JSON格式小于serialize返回的数据的结果。
JSON格式具有开放性和可移植性。其他语言也可以使用。
$a=数组( a=苹果, b=香蕉, c=椰子);
//序列化数组
$ s=JSON _ encode($ a);
echo $ s;
//输出结果:{"A ":"苹果"," B ":"香蕉"," C ":"椰子" }
回声
;
//反序列化
$ o=JSON _ decode($ s);
在上面的例子中,json_encode的输出长度明显比前一个例子中的serialize短。
3.var _导出和评估
var_export函数以字符串形式输出变量;Eval将字符串作为PHP代码执行,并将它们反序列化以获取原始变量的内容。
$a=数组( a=苹果, b=香蕉, c=椰子);
//序列化数组
$s=var_export($a,true);
echo $ s;
//输出结果:数组( A=苹果, B=香蕉, C=椰子,)
回声
;
//反序列化
eval($my_var=)。$ s . ;);
print _ r($ my _ var);
4.wddx_serialize_value和wddx反序列化
wdx _ serialize _ value函数可以序列化数组变量,并将它们作为XML字符串输出。
$a=数组( a=苹果, b=香蕉, c=椰子);
//序列化数组
$ s=wddx _ serialize _ value($ a);
echo $ s;
//输出结果(检查输出字符串的源代码):
苹果花
回声
;
//反序列化
$ o=wddx _ deserialize($ s);
print _ r($ o);
//输出结果:数组([A]=Apple [B]=Banana1=Coconut)
可以看出,XML标签的字符比较多,所以这种格式的序列化还是占了不少空间。
总结
上述函数在序列化数组变量时都可以正常执行,但应用于对象时就不一样了。例如,json_encode将无法序列化对象。反序列化对象时,unserialize和eval会产生不同的效果。
更多Php反序列化(php的序列化操作生成的哪种格式)相关信息请关注本站,本文仅仅做为展示!详情价格咨询客服!