详解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中的函数嵌套层数限制分析
Jun 13 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
php中session退出登陆问题
Feb 27 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
php实现上传图片文件代码
Jul 19 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
php 7新特性之类型申明详解
Jun 06 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 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实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
解析Python中while true的使用
2015/10/13 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
python用Configobj模块读取配置文件
2020/09/26 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
IBatis持久层技术
2016/07/18 面试题
个人简历的自荐信
2013/10/23 职场文书
高中课程设置方案
2014/05/28 职场文书
信用卡工作证明模板
2014/09/14 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
MySQL创建表操作命令分享
2022/03/25 MySQL