background image

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

)));

}

//反序列化