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 ) 
{ 
return base64_encode(gzcompress(serialize($obj))); 
}//反序列化
function my_unserialize($txt) 
{ 
return unserialize(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字符串形式輸出。

view source
print?
$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 )

  

?

轉載隨意,但請帶上本文地址:

http://www.nowamagic.net/librarys/veda/detail/2153

轉載于:https://www.cnblogs.com/lemonphp/p/4876641.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256590.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256590.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于python3的Opencv(一)-打開攝像頭顯示圖像

基于Python3的Opencv學習&#xff1a; import cv2 as cv def video_demo(): #0是代表攝像頭編號&#xff0c;只有一個的話默認為0capturecv.VideoCapture(0) while(True):ref,framecapture.read()cv.imshow("1",frame) #等待30ms顯示圖像&#xff0c;若過程中按“Esc…

.Net中的AOP系列之《方法執行前后——邊界切面》

返回《.Net中的AOP》系列學習總目錄 本篇目錄 邊界切面 PostSharp方法邊界方法邊界 VS 方法攔截ASP.NET HttpModule邊界真實案例——檢查是否為移動端用戶真實案例——緩存小結本系列的源碼本人已托管于Coding上&#xff1a;點擊查看。 本系列的實驗環境&#xff1a;VS 2013 Up…

matlab simulink筆記06 —— 利用simulink求解微分方程/simulink框圖與控制系統框圖的區別

目錄 1.利用integrator求解微分方程 1.1求解步驟 1.2例子 2.simulink框圖與控制系統框圖的區別 本人剛開始學習simulink,總是會將simulink框圖和控制系統框圖混淆,導致最后不能正確的根據simulink框圖得到相應的微

ubuntu搭建svn、git遇到的問題及解決辦法

不錯的git筆記博客&#xff1a; http://www.cnblogs.com/wanqieddy/category/406859.html http://blog.csdn.net/zxncvb/article/details/22153019 Git學習教程&#xff08;六&#xff09;Git日志 http://fsjoy.blog.51cto.com/318484/245261/ 圖解git http://my.oschina.net/x…

PHP IDE phpstorm 快捷鍵

這篇文章主要介紹了PHP IDE phpstorm 常用快捷鍵,本文分別列出了mac系統和Windows系統下的phpstorm快捷鍵,需要的朋友可以參考下 一、mac電腦phpstorm快捷鍵 command a 全選 command c 復制 command v 粘貼 command z 撤消 command k 代碼搜索 command l 輸入行號跳到某一…

Opencv SolvePnP調用實戰

1.環境說明與應用說明 VS2015opencv3.4&#xff0c;實際應用在MFC環境中&#xff01;主要是用來做定位&#xff0c;利用平面靶標給機器人的工具快換提供定位信息 2.實際調用 CV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints, …

matlab simulink筆記05 —— 積分模塊

1.連續積分模塊&#xff1a;integrator 例子見&#xff1a;matlab simulink筆記06 —— 利用simulink求解微分方程/simulink框圖與控制系統框圖的區別

squid在企業網中的應用

一&#xff1a;squid簡介&#xff1a; Squid是一種在Linux系統下使用的優秀的代理服務器軟件。Squid是一個緩存internet數據的一個軟件&#xff0c;它接收用戶的下載申請&#xff0c;并自動處理所下載的數據。也就是說&#xff0c;當一個用戶想要下載一個主頁時&#xff0c;它向…

win10+tensorflow faster-RCNN 訓練自己的數據集

首先&#xff0c;感謝博客上各路大佬的無私奉獻&#xff01;但是也不得不吐槽下&#xff0c;大佬些寫博客的時候能盡量寫的對小白友好一點嗎&#xff1f;期間遇到各種坑&#xff0c;說多了都是淚啊&#xff01;話不多說&#xff0c;上正題&#xff01; 環境&#xff1a;win10a…

matlab simulnk筆記07——模塊(接地模塊group、終止模塊terminal、信號合并mux與分解模塊demux)

1.接地模塊group 2.終止模塊terminal 3.信號合并mux 注意:合并僅僅指的是物理上的合并,數學上真正意義上的合并,只是將多個信號放在同一個管道上統一傳輸給顯示終端,但是每個信號之間互不影響,是相

二叉搜索樹的插入與刪除圖解

一、二叉搜索樹&#xff08;BSTree&#xff09;的概念 二叉搜索樹又被稱為二叉排序樹&#xff0c;那么它本身也是一棵二叉樹&#xff0c;那么滿足以下性質的二叉樹就是二叉搜索樹&#xff1a;1、若左子樹不為空&#xff0c;則左子樹上左右節點的值都小于根節點的值2、若它的右子…

AlienVault Ossim各版本鏡像下載地址

AlienVault Ossim各版本鏡像下載地址 OSSIM V5.0.3 ISO網盤下載地址 了解Ossim的架構、工作原理和使用方法可以參考我的新書以及http://edu.51cto.com/course/course_id-1186.html 這里提供的視頻教程。 本文轉自 李晨光 51CTO博客&#xff0c;原文鏈接&#xff1a;http://blo…

面試總結

lru算法&#xff1a;最近最少使用  1.新數據插入到鏈表頭部&#xff1b;  2.每當緩存命中&#xff08;即緩存數據被訪問&#xff09;&#xff0c;則將數據移到鏈表頭部&#xff1b;  3.當鏈表滿的時候&#xff0c;將鏈表尾部的數據丟棄。 自定義控件&#xff1a; 1.measu…

win10+anaconda安裝tensorflow和keras遇到的坑小結

win10下利用anaconda安裝tensorflow和keras的教程都大同小異&#xff08;針對CPU版本&#xff0c;我的gpu是1050TI的MAX-Q&#xff0c;不知為啥一直沒安裝成功&#xff09;&#xff0c;下面簡單說下步驟。 一 Anaconda安裝 一般來說&#xff0c;python選擇3.6的&#xff0c;目…

rman備份恢復命令之switch

一 switch 命令 1 switch命令用途 更新數據文件名為rman下鏡像拷貝時指定的數據文件名 更新數據文件名為 set newname 命令指定的名字。 2 switch 命令使用前提條件 rman 必須連接到目標數據庫 當switch tablespaces、datafiles、tempfiles時&#xff0c;這些文件必須離線 當…

服務核心 - 工具類

雖然類名稱為CWHService&#xff0c;我理解更多的是工具函數。 主要接口功能有&#xff1a; 1&#xff09;SetClipboardString設置字符串到windows剪貼板 2&#xff09;GetMachineID獲取機器標識&#xff0c;網卡地址MD5加密&#xff1b; 3&#xff09;GetMachineIDEx獲取機器標…

現代制造工程課堂筆記07——應力應變分析(考點應力莫爾圓)

目錄 選擇判斷題&#xff0c;簡單計算在莫爾圓那里出 一、單向拉伸中的應力應變 手寫筆記 選擇判斷題&#xff0c;簡單計算在莫爾圓那里出 一、單向拉伸中的應力應變 、 手寫筆記

win10+tensorflow CPU 部署CTPN環境

剛弄明白CTPN部署的時候&#xff0c;CTPN作者剛更新了簡易代碼版本&#xff0c;看介紹是把代碼優化了不需要多的配置。。。感覺好憂傷&#xff01; 源碼地址&#xff1a;https://github.com/eragonruan/text-detection-ctpn/tree/master 新版本地址&#xff1a;https://githu…

css如何實現背景透明,文字不透明?

之前做了個半透明彈層&#xff0c;但設置背景半透明時&#xff0c;子元素包含的字體及其它元素也都變成了半透明。對opacity這個屬性認識的不透徹&#xff0c;在這里做一些總結&#xff0c;方便以后使用。 背景透明&#xff0c;文字不透明的解決方法&#xff1a;為元素添加一個…