详解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 相关文章推荐
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
php中大括号作用介绍
Mar 22 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
PHP7变量处理机制修改
Mar 09 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初学者头疼问题总结
2006/07/08 PHP
用Socket发送电子邮件
2006/10/09 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
在python 中split()使用多符号分割的例子
2019/07/15 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
Python如何telnet到网络设备
2021/02/18 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
纽约海:Sea New York
2018/11/04 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
森林防火工作方案
2014/02/14 职场文书
战略合作协议书范本
2014/04/18 职场文书
三万活动总结
2014/04/28 职场文书
诉讼授权委托书
2014/10/15 职场文书
活动总结书怎么写
2015/05/11 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
hive数据仓库新增字段方法
2022/06/25 数据库