详解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的FTP学习(一)[转自奥索]
Oct 09 PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
Aug 21 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
php中json_encode中文编码问题分析
Sep 13 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
php UBB 解析实现代码
Nov 27 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
php绘制一个矩形的方法
Jan 24 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 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数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
php的debug相关函数用法示例
2016/07/11 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
jQuery无刷新切换主题皮肤实例讲解
2015/10/21 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
微信小程序实现订单倒计时
2020/11/01 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
新学期校长寄语
2014/01/18 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
小班上学期评语
2014/05/05 职场文书
争先创优活动总结
2014/08/27 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
大学生入党自传2015
2015/06/26 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
Python序列化与反序列化相关知识总结
2021/06/08 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android