详解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的错误信息
Oct 09 PHP
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
php debug 安装技巧
Apr 30 PHP
解析php防止form重复提交的方法
Jul 01 PHP
PHP制作图形验证码代码分享
Oct 23 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
PHP类的封装与继承详解
Sep 29 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
PHP调用接口API封装的例子
Oct 11 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 strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
php实现网站留言板功能
2015/11/04 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python 正则式 概述及常用字符
2009/05/07 Python
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
python语言中with as的用法使用详解
2018/02/23 Python
浅谈Python中的私有变量
2018/02/28 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
Python处理session的方法整理
2019/08/29 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
python之随机数函数的实现示例
2020/12/30 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
财务分析个人的自荐书范文
2013/11/24 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
合作投资意向书
2014/04/01 职场文书
个人授权委托书范本
2014/09/14 职场文书
校园广播稿范文
2015/08/19 职场文书