PHP 多种序列化与反序列化的方法
以下是对 PHP 中多种序列化与反序列化的方法进行了详细的分析介绍,供大家参考下
序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这
个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,
使程序更具维护性。
1. serialize 和 unserialize 函数
这两个是序列化和反序列化 PHP 中数据的常用函数。
代码如下:
<?php
$a
=
array
('a'=> 'Apple' ,'b' => 'banana', 'c' => 'Coconut');
//序列化数组
$s
= serialize(
$a
);
echo
$s
;
//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
echo
'<br /><br />';
//反序列化
$o
= unserialize(
$s
);
print_r(
$o
);
//
输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut )
?>
当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题。
为了克服这个问题,一个巧妙的技巧是使用
base64_encode
和
base64_decode
。
代码如下:
$obj
=
array
();
//序列化
$s
=
base64_encode
(serialize(
$obj
));
//反序列化
$original
= unserialize(
base64_decode
(
$s
));
但是 base64 编码将增加字符串的长度。为了克服这个问题,可以和 gzcompress 一起使用。
//定义一个用来序列化对象的函数
function
my_serialize(
$obj
)
{
returnbase64_encode(gzcompress(serialize(
$obj
)));
}
//反序列化