国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 解析PHP多種序列化與反序列化的方法

解析PHP多種序列化與反序列化的方法

2020-04-06 11:30PHP教程網 PHP教程

本篇文章是對PHP中多種序列化與反序列化的方法進行了詳細的分析介紹,需要的朋友參考下

序列化是將變量轉換為可保存或傳輸的字符串的過程;反序列化就是在適當的時候把這個字符串再轉化成原來的變量使用。這兩個過程結合起來,可以輕松地存儲和傳輸數據,使程序更具維護性。
1. serialize和unserialize函數
這兩個是序列化和反序列化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 )
{
   returnbase64_encode(gzcompress(serialize($obj)));
}
//反序列化
function my_unserialize($txt)
{
   returnunserialize(gzuncompress(base64_decode($txt)));
}


2. json_encode 和 json_decode
使用JSON格式序列化和反序列化是一個不錯的選擇:
    使用json_encode和json_decode格式輸出要serialize和unserialize格式快得多。
    JSON格式是可讀的。
    JSON格式比serialize返回數據結果小。
    JSON格式是開放的、可移植的。其他語言也可以使用它。

復制代碼 代碼如下:


$a = array('a'=> 'Apple' ,'b' => 'banana', 'c' => 'Coconut');

//序列化數組
$s = json_encode($a);
echo $s;
//輸出結果:{"a":"Apple","b":"banana","c":"Coconut"}
echo '<br /><br />';
//反序列化
$o = json_decode($s);


在上面的例子中,json_encode輸出長度比上個例子中serialize輸出長度顯然要短。
3. var_export 和 eval
var_export 函數把變量作為一個字符串輸出;eval把字符串當成PHP代碼來執行,反序列化得到最初變量的內容。

復制代碼 代碼如下:


$a = array('a'=> 'Apple' ,'b' => 'banana', 'c' => 'Coconut');

//序列化數組
$s = var_export($a, true);
echo $s;
//輸出結果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )
echo '<br /><br />';
//反序列化
eval('$my_var='. $s . ';');
print_r($my_var);


4. wddx_serialize_value 和 wddx deserialize
wddx_serialize_value函數可以序列化數組變量,并以XML字符串形式輸出。

復制代碼 代碼如下:


$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標簽字符較多,導致這種格式的序列化還是占了很多空間。
小結
上述所有的函數在序列化數組變量時都能正常執行,但運用到對象就不同了。例如json_encode序列化對象就會失敗。反序列化對象時,unserialize和eval將有不同的效果。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲综合网站 | 国产一区网站 | 亚洲国产高清视频 | 九色网址 | 久久久久久久久国产成人免费 | 一区二区三区中文字幕 | 亚洲区视频 | 综合网视频 | 久久久久久一区二区三区 | 婷婷五月在线视频 | 国产一级视频在线观看 | 欧美日韩一区二区三区在线观看 | 国产精品高清在线 | 欧美第8页| 能免费看的av | 中文字幕日韩欧美 | 国产一区二区三区 | 国产精品久久久久久吹潮 | 国产一区二区精品在线观看 | 自拍偷拍一区二区三区 | 黄色免费在线网站 | 免费看男女www网站入口在线 | 日本99精品 | а天堂中文最新一区二区三区 | 日韩在线一区二区三区 | 亚洲国产精品久久久久久 | 北条麻妃一区二区三区中文字幕 | 黄在线观看 | 视频一区二区三区中文字幕 | 欧美日韩在线免费观看 | 国产精品二区三区 | 99手机在线视频 | 美日韩一区二区三区 | 99视频在线 | 久久精品亚洲 | 久久免费精品一区二区三区 | 成人精品在线观看 | 免费视频成人国产精品网站 | 野花国产精品入口 | 成人免费毛片嘿嘿连载视频 | 国产精品美女久久久久久久网站 |