Home  >  Article  >  Backend Development  >  Analysis of multiple serialization examples in PHP

Analysis of multiple serialization examples in PHP

小云云
小云云Original
2018-02-12 09:52:361097browse

Serialization is the process of converting variables into strings that can be saved or transmitted; deserialization is to convert this string into the original variable for use at the appropriate time. The combination of these two processes can easily store and transmit data, making the program more maintainable. This article mainly introduces you to the detailed explanation of various serialization/deserialization methods in PHP. The editor thinks it is quite good. Now Share it with everyone and give it as a reference. Let’s follow the editor to take a look, I hope it can help everyone.

1. serialize and unserialize functions

These two are common functions for serializing and deserializing data in PHP.


<?php
 
$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
 
//序列化数组
 
$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 &#39;<br /><br />&#39;;
 
//反序列化
 
$o = unserialize($s);
 
print_r($o);
 
//输出结果 Array ( [a] => Apple [b] => banana => Coconut )
 
?>


//反序列化
$o = unserialize($s);
print_r($o);
//输出结果 Array ( [a] => Apple [b] => banana => Coconut )
?>

When array values ​​contain characters such as double quotes, single quotes, or colons, they may be deserialized. Problems will arise. To overcome this problem, a neat trick is to use base64_encode and base64_decode.


$obj = array();
//序列化
$s = base64_encode(serialize($obj));
//反序列化
$original = unserialize(base64_decode($s));

But base64 encoding will increase the length of the string. To overcome this problem, it can be used with gzcompress.


//定义一个用来序列化对象的函数
 function my_serialize( $obj )
{
  return base64_encode(gzcompress(serialize($obj)));
}
//反序列化
function my_unserialize($txt)
{
  return unserialize(gzuncompress(base64_decode($txt)));
}

2. json_encode and json_decode

Using JSON format serialization and deserialization is a good choice:

Using json_encode and json_decode format output is much faster than serialize and unserialize format.

JSON format is readable.

The JSON format is smaller than the data returned by serialize.

The JSON format is open and portable. Other languages ​​can use it as well.


$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
//序列化数组
$s = json_encode($a);
echo $s;
//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}
echo &#39;<br /><br />&#39;;
//反序列化
$o = json_decode($s);

In the above example, the json_encode output length is obviously shorter than the serialize output length in the previous example.

3. var_export and eval

var_export function outputs the variable as a string; eval executes the string as a PHP code, and deserializes it to obtain the original variable content.


 $a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
 
//序列化数组
 
$s = var_export($a , true);
 
echo $s;
 
//输出结果: array ( &#39;a&#39; => &#39;Apple&#39;, &#39;b&#39; => &#39;banana&#39;, &#39;c&#39; => &#39;Coconut&#39;, )
 
echo &#39;<br /><br />&#39;;
 
//反序列化
 
eval(&#39;$my_var=&#39; . $s . &#39;;&#39;);
 
print_r($my_var);

4. The wddx_serialize_value and wddx deserialize

wddx_serialize_value functions can serialize array variables and output them as XML strings.


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

It can be seen that there are many XML tag characters, so the serialization of this format still takes up a lot of space.

Summary

All the above functions can be executed normally when serializing array variables, but it is different when applied to objects. For example, json_encode serialized objects will fail. When deserializing an object, unserialize and eval will have different effects.

Related recommendations:

JS method to implement form serialization to determine null value

About php data sequence Testing

jQuery form serialization example code example sharing

The above is the detailed content of Analysis of multiple serialization examples in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn