详解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 设计模式之观察者模式介绍
Feb 22 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
PHP模糊查询的实现方法(推荐)
Sep 06 PHP
10个值得深思的PHP面试题
Nov 14 PHP
浅析php中array_map和array_walk的使用对比
Nov 20 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
php实现的双色球算法示例
Jun 20 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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/12/13 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
php GeoIP的使用教程
2011/03/09 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
机关领导干部作风整顿整改措施
2014/09/19 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
商铺租房协议书范本
2014/12/04 职场文书
廉洁自律个人总结
2015/02/14 职场文书
教学督导岗位职责
2015/04/10 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
Python编写nmap扫描工具
2021/07/21 Python
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android