把複雜的資料型別壓縮到一個字串中
serialize() 把變數和它們的值編碼成文字形式
unserialize() 恢復原先變數
<span style="color: #800080">$stooges = <span style="color: #0000ff"><a href="http://www.php.cn/wiki/1041.html" target="_blank">array</a>('Moe','Larry','Curly');<br/><span style="color: #800080">$<a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> = <span style="color: #008080">serialize(<span style="color: #800080">$stooges);<br/><span style="color: #008080"><a href="http://www.php.cn/wiki/1362.html" target="_blank">print</a>_r(<span style="color: #800080">$new);<span style="color: #0000ff"><a href="http://www.php.cn/wiki/1343.html" target="_blank">echo</a> "<br />";<br/><span style="color: #008080">print_r(<span style="color: #008080">unserialize(<span style="color: #800080">$new));</span></span></span></span></span></span></span></span></span></span></span>
結果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ( [0] => Moe [1] => Larry [2] => Curly )
當把這些序列化的資料放在URL中在頁面之間會傳遞時,需要對這些資料呼叫urlencode(),以確保在其中的URL元字元進行處理:
<span style="color: #800080">$shopping = <span style="color: #0000ff">array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4);<br/><span style="color: #0000ff">echo '<a href="next.php?cart='.<span style="color: #008080">urlencode(<span style="color: #008080">serialize(<span style="color: #800080">$shopping)).'">next</a>';</span></span></span></span></span></span>
margic_quotes_gpc和magic_quotes_runtime配置項的設定會影響傳遞到unserialize()中的資料。
如果magic_quotes_gpc項目是啟用的,那麼在URL、POST變數以及cookies中傳遞的資料在反序列化之前必須用stripslashes()進行處理:
<span style="color: #800080">$new_cart = <span style="color: #008080">unserialize(<span style="color: #008080">stripslashes(<span style="color: #800080">$cart)); <span style="color: #008000">//<span style="color: #008000">如果magic_quotes_gpc开启<span style="color: #008000"><br/><span style="color: #800080">$new_cart = <span style="color: #008080">unserialize(<span style="color: #800080">$cart);</span></span></span></span></span></span></span></span></span></span>
如果magic_quotes_runtime是啟用的,那麼在向檔案中寫入序列化的資料之前必須用addslashes()進行處理,而在讀取它們之前則必須用stripslashes()進行處理:
//当对一个对象进行反序列化操作时,PHP会自动地调用其wakeUp()方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。
以上是深入了解php中序列化與反序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!