PHP多种序列化/反序列化的方法 (转载)
1. serialize和unserialize函数
这两个是序列化和反序列化PHP中数据的常用函数。
<?php$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');//序列化数组 $s = serialize($a); echo $s; //输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}echo '<br /><br />';//反序列化 $o = unserialize($s);print_r($o); //输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut )?>
当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题。为了克服这个问题,一个巧妙的技巧是使用base64_encode和base64_decode。
$obj = array();
//序列化
$s = base64_encode(serialize($obj));
//反序列化
$original = unserialize(base64_decode($s));
但是base64编码将增加字符串的长度。为了克服这个问题,可以和gzcompress一起使用。
//定义一个用来序列化对象的函数
function my_serialize( $obj )
{
return base64_encode(gzcompress(serialize($obj)));
}//反序列化
function my_unserialize($txt)
{
return unserialize(gzuncompress(base64_decode($txt)));
}
2. json_encode 和 json_decode
使用JSON格式序列化和反序列化是一个不错的选择:
- 使用json_encode和json_decode格式输出要serialize和unserialize格式快得多。
- JSON格式是可读的。
- JSON格式比serialize返回数据结果小。
- JSON格式是开放的、可移植的。其他语言也可以使用它。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');//序列化数组
$s = json_encode($a);
echo $s;
//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}echo '<br /><br />';//反序列化
$o = json_decode($s);
在上面的例子中,json_encode输出长度比上个例子中serialize输出长度显然要短。
3. var_export 和 eval
var_export 函数把变量作为一个字符串输出;eval把字符串当成PHP代码来执行,反序列化得到最初变量的内容。$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');//序列化数组
$s = var_export($a , true);
echo $s;
//输出结果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )echo '<br /><br />';//反序列化
eval('$my_var=' . $s . ';');print_r($my_var);
4. wddx_serialize_value 和 wddx deserialize
wddx_serialize_value函数可以序列化数组变量,并以XML字符串形式输出。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');//序列化数组
$s = wddx_serialize_value($a);
echo $s;//输出结果(查看输出字符串的源码):<wddxPacket version='1.0'><header/><data><struct><var name='a'><string>Apple</string></var><var name='b'><string>banana</string></var><var name='c'><string>Coconut</string></var></struct></data></wddxPacket>echo '<br /><br />';//反序列化
$o = wddx_deserialize($s);print_r($o);
//输出结果:Array ( [a] => Apple [b] => banana 1 => Coconut )
转载随意,但请带上本文地址:
http://www.nowamagic.net/librarys/veda/detail/2153
转载于:https://www.cnblogs.com/lemonphp/p/4876641.html
PHP多种序列化/反序列化的方法 (转载)相关推荐
- PHP多种序列化/反序列化的方法(serialize和unserialize函数)
serialize和unserialize函数这两个是序列化和反序列化PHP中数据的常用函数.<?php$a = array('a' => 'Apple' ,'b' => 'bana ...
- PHP多种序列化/反序列化的方法 json_encode json_decode
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...
- php+反序列化方法,PHP序列化反序列化的方法详解
在一些开源的php源代码中,我们经常看到一些配置文件里面存放的是一些类似带有格式的变量名称和值.刚开始还不明白这个是怎么回事儿.后来才知道这个是为了将一个复杂(也可能并不那么复杂)的数据结构转换成一个 ...
- Redis Template使用append方法不起作用的解决办法以及序列化/反序列化的解释
今天使用Redis Template进行测试发现的问题, 遇到这个错 org.springframework.data.redis.serializer.SerializationException: ...
- 在.net中序列化读写xml方法的总结(转载)
阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命名节点名称 列表和数组的序列化 列表和数 ...
- php json字符串序列化,JSON序列化与反序列化实现方法(附代码)
这次给大家带来JSON序列化与反序列化实现方法(附代码),JSON序列化与反序列化实现的注意事项有哪些,下面就是实战案例,一起来看一下. 一.JSON简介 JSON(JavaScript Object ...
- 程序验证Jackson反序列化的规则、Jackson序列化与反序列化关键方法程序详细分析
目录 0. 为什么要做这个分析 1. Jackson反序列化时,无参构造.有参构造的执行顺序[附程序截图] 1.1 没有无参构造时: 1.2 无参构造和有参构造方法都有的时候先走无参构造: 2. Ja ...
- 序列化反序列化api(入门级)
定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...
- 10.8-全栈Java笔记:序列化/反序列化的步骤和实例
本节我们详细讲解10.3节中提到的序列化和反序列化操作. 序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我 ...
最新文章
- Linux — OpenSSH 安全的远程连接
- 【1】 pythonic modern c++:字符串
- jquery/css实现步骤条
- redhat6 + 11G DG部署
- 【MFC】根据菜单创建工具栏
- Linux下C语言的文件操作
- Sublime Text3中文环境设置
- IIS负载均衡(转)
- 如何建立个人博客网站
- 计算机绘图员 机械 实训二,计算机绘图员[机械]实训形考.doc
- php require vs. include
- linux tomcat 进程杀掉_测试开发人员必备Linux命令
- 第三方app_官方打不过第三方APP之 知乎 篇
- ubuntu使用CMake时报错compilation terminated找不到头文件解决方法
- 喷墨打印机一体机清零软件使用图解
- 关于火狐插件总结。。。
- 计算机房的标准和规定,数据中心机房建设,需要依据哪些国家标准和行业标准或规范?...
- tomcat乱码解决办法
- 图灵聊天机器人小程序
- Another exception was thrown: The PrimaryScrollController is currently attached to more than one Scr
热门文章
- cygwin学习linux命令,cygwin 在windows下使用linux命令的方法
- 十字链表计算矩阵乘积 c语言,求用十字链表实现矩阵相加算法(C语言)急!!!...
- 数学--数论--广义欧拉降幂(模板)
- ACM-ICPC 2019 山东省省赛 C Wandering Robot
- Kafka消息处理与集群维护
- 玩转mini2440开发板之【linux内核的编译和下载】
- linux下程序如何实现单实例运行
- FLASH ERASE:CHIP、BLOCK、SECTOR
- 对Kalman Filter的理解
- DRAM, SRAM, SDRAM 的关系与区别