详解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 output buffering缓存及程序缓存深入解析
Jul 15 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
ThinkPHP关于session的操作方法汇总
Jul 18 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
Oct 20 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
php的扩展写法总结
May 14 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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
cmd下运行php脚本
2008/11/25 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
PHP7多线程搭建教程
2017/04/21 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
python实现简单中文词频统计示例
2017/11/08 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
浅析Python面向对象编程
2020/07/10 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
经济管理专业毕业生推荐信
2013/11/11 职场文书
户外活动总结范文
2014/04/30 职场文书
小区推广策划方案
2014/06/06 职场文书
民事答辩状范本
2015/05/21 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
python b站视频下载的五种版本
2021/05/27 Python
html form表单基础入门案例讲解
2021/07/15 HTML / CSS
python基础之函数的定义和调用
2021/10/24 Python