详解PHP序列化反序列化的方法


Posted in PHP onOctober 27, 2015

经常看到一些配置文件里面存放的是一些类似带有格式的变量名称和值,其实就是一个序列化的过程,在需要用到这些数据库的时候会进行一个反序列化过程,就是将这个字符串再还原成他原来的数据结构。下面说说php 如何进行数据的序列化和反序列化的。
php 将数据序列化和反序列化其实就用到两个函数,serialize unserialize
serialize 将数组格式化成有序的字符串
unserialize 将数组还原成数组
例如:

$user=array('Moe','Larry','Curly'); 
$user=serialize($stooges); 
echo '<pre>'; 
print_r($user); 
echo '<br />'; 
print_r(unserialize($user));

结果:

a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ( [0] => Moe [1] => Larry [2] => Curly )

注意当数组值包含如双引号、单引号、冒号或中文等字符时,它们被反序列化后,可能会出现乱码或格式被打乱的问题。

解决乱码问题可以使用base64_encode base64_decode 两个函数。
例如:

$user=array('Moe','Larry','Curly'); 
$user=base64_encode(serialize($user)); 
$user=unserialize(base64_decode($user));

这样就不会出现乱码类的问题了,但是base64 编码却增加了存储字符串的长度

由以上我们可以总结出一个自己的序列化和反序列化的函数来,如下:

function my_serialize($obj_array){ 
  return base64_encode(gzcompress(serialize($obj_array))); 
} 
//反序列化 
function my_unserialize($str){ 
  return unserialize(gzuncompress(base64_decode($str))); 
}

以上就是告诉大家php是如何进行数据的序列化和反序列化的,并且在遇到反序列化之后,出现乱码或格式被打乱的原因和解决措施,希望本文的介绍对大家的学习有所帮助。

PHP 相关文章推荐
PHP新手上路(八)
Oct 09 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
PHP小技巧之函数重载
Jun 02 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
PHP递归创建多级目录
Nov 05 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
php实现的一段简单概率相关代码
May 30 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 #PHP
php常量详细解析
Oct 27 #PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 #PHP
PHP的APC模块实现上传进度条
Oct 27 #PHP
php+ajax制作无刷新留言板
Oct 27 #PHP
一个完整的php文件上传类实例讲解
Oct 27 #PHP
php邮件发送的两种方式
Apr 28 #PHP
You might like
简单的php写入数据库类代码分享
2011/07/26 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
python解析xml文件实例分享
2013/12/04 Python
python实现目录树生成示例
2014/03/28 Python
玩转python爬虫之正则表达式
2016/02/17 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
python运行其他程序的实现方法
2017/07/14 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
python3实现绘制二维点图
2019/12/04 Python
pytorch的batch normalize使用详解
2020/01/15 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
餐厅执行经理岗位职责范本
2014/02/26 职场文书
给公司的建议书范文
2014/05/13 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
物理课外活动总结
2014/08/27 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
欠条样本
2015/07/03 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书