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

PHP多种序列化/反序列化的方法 (转载)的更多相关文章

  1. PHP多种序列化/反序列化的方法(serialize和unserialize函数)

    serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数. <?php $a = array('a' => 'Apple' ,'b' => 'b ...

  2. PHP多种序列化/反序列化的方法

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...

  3. PHP多种序列化/反序列化的方法 serialize,json_encode等

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1.  serialize ...

  4. PHP多种序列化/反序列化的方法 json_encode json_decode

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...

  5. java Serializable和Externalizable序列化反序列化详解(转载)

    一.什么是序列化? “对象序列化”(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存 ...

  6. PHP 序列化/反序列化的方法函数

    我们在开发的过程中常常遇到需要把对象或者数组进行序列号存储,反序列化输出的情况.特别是当需要把数组存储到mysql数据库中时,我们时常需要将数组进行序列号操作. 序列化(串行化):是将变量转换为可保存 ...

  7. PHP 几种 序列化/反序列化的方法

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...

  8. 在.net中序列化读写xml方法的总结--转载过来学习学习

    原文章地址:http://www.cnblogs.com/fish-li/archive/2013/05/05/3061816.html 首先做个大概的总结,XML包括的元素有XmlElement,X ...

  9. 在.net中序列化读写xml方法的总结

    在.net中序列化读写xml方法的总结 阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命 ...

随机推荐

  1. js特殊字符转义

    点的转义:. ==> \\u002E 美元符号的转义:$ ==> \\u0024 乘方符号的转义:^ ==> \\u005E 左大括号的转义:{ ==> \\u007B 左方括 ...

  2. java普通类如何得到spring中的bean类

    在SSH集成的前提下.某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象. 之前我在网上找了好几好久都没有找到合适的方法.例如: ApplicationContext ...

  3. 配置sphinx

    1.先安装sphinxclient    #cd /usr/local/src    #wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz   ...

  4. php连接postgresql

    在ubuntu下用php连接postgresql需要下个模块php5-pgsql 连接数据库并显示一张表的内容: <?php #连接数据库 $conn = pg_connect("ho ...

  5. 跪求 EF缓存问题 也不知道是不是缓存 问题

    1.数据库里面查的结果 2 vs里面查的结果   为什么 不是16 而是2 下面是代码 /// <summary> /// 权限检查 /// </summary> public ...

  6. mvn打包发布

    一:打包 cmd进入工作目录运行命令 1: mvn clean 2: mvn install  3: mvn clean compile    4: mvn package -DiskipTest  ...

  7. 产生n bit所有可能的序列

    void binary(int n) { ) printf("%s\n",A); // Assume A is a global variable else { A[n-] = ' ...

  8. (转载)HDU4565

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4565 这个博客讲的比较好:http://blog.csdn.net/ljd4305/article/d ...

  9. hdu 4649 Professor Tian 多校联合训练的题

    这题起初没读懂题意,悲剧啊,然后看了题解写完就AC了 题意是给一个N,然后给N+1个整数 接着给N个操作符(只有三种操作  即  或 ,与 ,和异或 |   &  ^ )这样依次把操作符插入整 ...

  10. html&CSS初学

    <link href="https://fonts.gdgdocs.org/css?family=Lobster" rel="stylesheet" ty ...