PHP 幾種 序列化 反序列化的方法

2022-06-11 10:48:12 字數 2198 閱讀 5591

序列化是將變數轉換為可儲存或傳輸的字串的過程;反序列化就是在適當的時候把這個字串再轉化成原來的變數使用。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料,使程式更具維護性。

1. serialize和unserialize函式

<?php

$a = array('

a' => '

' ,'

b' => '

banana

' , '

c' => '

coconut');

//序列化陣列

$s =serialize($a);

echo $s;

//echo ''

;//反序列化

$o =unserialize($s);

print_r($o);

// ?>

當陣列值包含如雙引號、單引號或冒號等字元時,它們被反序列化後,可能會出現問題。為了克服這個問題,乙個巧妙的技巧是使用base64_encode和base64_decode。

$obj =array();

//序列化

$s =base64_encode(serialize($obj));

//反序列化

$original =unserialize(base64_decode($s));

但是base64編碼將增加字串的長度。為了克服這個問題,可以和gzcompress一起使用。

//定義乙個用來序列化物件的函式

function my_serialize( $obj )

//反序列化

function my_unserialize($txt)

2. json_encode 和 json_decode

使用json格式序列化和反序列化是乙個不錯的選擇: 

$a = array('

a' => '

' ,'

b' => '

banana

' , '

c' => '

coconut');

//序列化陣列

$s =json_encode($a);

echo $s;

//echo ''

;//反序列化

$o = json_decode($s);

在上面的例子中,json_encode輸出長度比上個例子中serialize輸出長度顯然要短。

3. var_export 和 eval

var_export 函式把變數作為乙個字串輸出;eval把字串當成php**來執行,反序列化得到最初變數的內容。

$a = array('

a' => '

' ,'

b' => '

banana

' , '

c' => '

coconut');

//序列化陣列

$s = var_export($a , true

);echo $s;

//echo ''

;//反序列化

eval(

'$my_var=

' . $s . ';'

);print_r($my_var);

4. wddx_serialize_value 和 wddx deserialize

wddx_serialize_value函式可以序列化陣列變數,並以xml字串形式輸出。

$a = array('

a' => '

' ,'

b' => '

banana

' , '

c' => '

coconut');

//序列化陣列

$s =wddx_serialize_value($a);

echo $s;

//banana

coconut

echo ''

;//反序列化

$o =wddx_deserialize($s);

print_r($o);

//

可以看出,xml標籤字元較多,導致這種格式的序列化還是佔了很多空間。

小結上述所有的函式在序列化陣列變數時都能正常執行,但運用到物件就不同了。例如json_encode序列化物件就會失敗。反序列化物件時,unserialize和eval將有不同的效果。

序列化反序列化

只要用到網路開發啊,就一定會用到序列化反序列化。1,自定義結構體 struct test int len int type char data 10 test data test buffer.缺點 明文,只支援基本型別,不支援變長結構 2,在1的基礎上,自定義乙個緩衝類,存放乙個訊息。把訊息寫入緩...

序列化反序列化

using system using system.collections.generic using system.io using system.linq using system.text using system.threading.tasks namespace 序列化反序列化 syste...

PHP多種序列化 反序列化的方法

序列化是將變數轉換為可儲存或傳輸的字串的過程 反序列化就是在適當的時候把這個字串再轉化成原來的變數使用。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料,使程式更具維護性。1.serialize和unserialize函式 這兩個是序列化和反序列化php中資料的常用函式。序列化陣列 s serializ...