详解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 相关文章推荐
ThinkPHP采用模块和操作分析
Apr 18 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 PHP
简单谈谈PHP中的trait
Feb 25 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
PHP实现简单注册登录系统
Dec 28 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判断正常访问和外部访问的示例
2014/02/10 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
php 使用array函数实现分页
2015/02/13 PHP
PHP Reflection API详解
2015/05/12 PHP
php生成gif动画的方法
2015/11/05 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
基于vue.js无缝滚动效果
2018/01/25 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python改变日志(logging)存放位置的示例
2014/03/27 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
Python FFT合成波形的实例
2019/12/04 Python
python生成并处理uuid的实现方式
2020/03/03 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
荷兰电脑专场:Paradigit
2018/05/05 全球购物
专业实习自我鉴定
2013/10/29 职场文书
高中运动会广播稿
2014/01/21 职场文书
广播体操比赛口号
2014/06/10 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技