详解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 相关文章推荐
最小化数据传输――在客户端存储数据
Oct 09 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP图片验证码制作实现分享(全)
May 10 PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 PHP
简单的php新闻发布系统教程
May 09 PHP
PHP SPL标准库中的常用函数介绍
May 11 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
yii框架搜索分页modle写法
Dec 19 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
js图片自动切换效果处理代码
2013/05/07 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
Puppet的一些技巧
2018/09/17 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
在Python中处理时间之clock()方法的使用
2015/05/22 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
python多线程之事件Event的使用详解
2018/04/27 Python
Python中作用域的深入讲解
2018/12/10 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
大学老师推荐信
2014/02/25 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
新郎婚礼致辞
2015/07/27 职场文书
mysql sql常用语句大全
2022/06/21 MySQL