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的序列化操作生成的哪种格式)相关信息请关注本站,本文仅仅做为展示!详情价格咨询客服!