详解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的库,结果发现很多东西
Dec 31 PHP
SMARTY学习手记
Jan 04 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
PHP中的替代语法简介
Aug 22 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP高并发和大流量解决方案整理
Dec 24 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
javascript radio 联动效果
2009/03/04 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
Webpack之tree-starking 解析
2018/09/11 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
Python跳出多重循环的方法示例
2019/07/03 Python
Python银行系统实战源码
2019/10/25 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
Sql面试题
2013/03/20 面试题
路政管理专业推荐信
2013/11/11 职场文书
运动会解说词100字
2014/01/31 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
功夫熊猫观后感
2015/06/10 职场文书
夏洛特的网观后感
2015/06/15 职场文书
公司人力资源管理制度
2015/08/05 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python