详解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详细彻底学习Smarty
Mar 27 PHP
Discuz 模板语句分析及知识技巧
Aug 21 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
php实现rc4加密算法代码
Apr 25 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 PHP
PHP实现文件上传功能实例代码
May 18 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP array_reduce()函数的应用解析
Oct 28 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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 常用类汇总 推荐收藏
2010/05/13 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
php日期操作技巧小结
2016/06/25 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
JQuery基础语法小结
2015/02/27 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
JS实现4位随机验证码
2020/10/19 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
护士毕业实习感言
2014/03/05 职场文书
文秘自荐信
2014/06/28 职场文书
简历中自我评价范文
2015/03/11 职场文书
Python+Appium新手教程
2021/04/17 Python
Python Matplotlib库实现画局部图
2021/11/17 Python