详解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采集速度探究总结(原创)
Apr 18 PHP
PHP 批量更新网页内容实现代码
Jan 05 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
php根据年月获取季度的方法
Mar 31 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
php自定义时间转换函数示例
Dec 07 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 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
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
Python 多线程Threading初学教程
2017/08/22 Python
分析Python读取文件时的路径问题
2018/02/11 Python
Python iter()函数用法实例分析
2018/03/17 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
shallow copy和deep copy的区别
2016/05/09 面试题
小学教师办公室制度
2014/02/03 职场文书
总经理司机岗位职责
2014/02/06 职场文书
信息工作经验交流材料
2014/05/28 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
培训研修方案
2014/06/06 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书