php 数组序列化和反序列化serialize 和 unserialize

  • Post author:
  • Post category: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 )
{
   return base64_encode(gzcompress(serialize($obj)));
}
//反序列化
function my_unserialize($txt)
{
   return unserialize(gzuncompress(base64_decode($txt)));
}



版权声明:本文为Just_shunjian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。