详解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
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
PHP IN_ARRAY 函数使用注意事项
Jul 24 PHP
php session安全问题分析
Jun 24 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
php适配器模式介绍
Aug 14 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
php类常量用法实例分析
Jul 09 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
TP5框架使用QueryList采集框架爬小说操作示例
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
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
php如何获取Http请求
2020/04/30 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
python excel多行合并的方法
2020/12/09 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
会计辞职信范文
2014/01/15 职场文书
矿泉水广告词
2014/03/20 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
婚宴父亲致辞
2015/07/27 职场文书
学生会工作感言
2015/08/07 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
Python基础之元类详解
2021/04/29 Python
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python