php序列化的几种形式

场景 :

cookie无法存储复合形式的数据,所以需要序列化一个多维数组存入cookie,但是由于php版本太低(5.2),不支持json_encode

解决:

1,serialize和unserialize函数 : 只支持一维数组 ,据说对对象的支持比较好,json_encode是不支持对象的

2,base64_encode和base64_decode,同样的问题,不支持多维,如果用它的话,base64编码将增加字符串的长度。为了克服这个问题,可以和gzcompress一起使用:

function my_serialize( $obj )

{

  return base64_encode(gzcompress(serialize($obj)));

}

//反序列化

function my_unserialize($txt)

{

  return unserialize(gzuncompress(base64_decode($txt)));

}

3. var_export 和 eval

$look_books = array($aid => array($cid => array('article_name' => $article->articlename, 'chapter_name' => $chapter->chaptername))) + $look_books;
            $look_books = var_export($look_books, true);
            setcookie('look_books', $look_books, $cookieTime, '/', '.dym.com');

支持多维数组,但是需要注意单双引号会有转义符,导致eval失败,需要把转义符去掉

stripcslashes() 即可。

4. wddx_serialize_value 和 wddx deserialize

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
  
//序列化数组
$s = wddx_serialize_value($a);
echo $s;
  
//输出结果(查看输出字符串的源码):<wddxPacket version='1.0'><header/><data><struct><var name='a'><string>Apple</string></var><var name='b'><string>banana</string></var><var name='c'><string>Coconut</string></var></struct></data></wddxPacket>
  
echo '<br /><br />';
  
//反序列化
$o = wddx_deserialize($s);
print_r($o);
//输出结果:Array ( [a] => Apple [b] => banana 1 => Coconut )

 

这种方式xml本身的标签占用字符过多,比较占用内存。

解决时自己使用了第三种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值