php 提供serialize(序列化) 与unserialize(反序列化)方法。
使用serialize序列化后,再使用unserialize反序列化就可以获取原来的数据。
<?php $arr = array( 'name' => 'fdipzone', 'gender' => 'male' ); $str = serialize($arr); //序列化 echo 'serialize str:'.$str."\r\n\r\n"; $content = unserialize($str); // 反序列化 echo "unserialize str:\r\n"; var_dump($content); ?>
输出:
serialize str:a:2:{s:4:"name";s:8:"fdipzone";s:6:"gender";s:4:"male";} unserialize str: array(2) { ["name"]=> string(8) "fdipzone" ["gender"]=> string(4) "male" }
但下面这个例子反序列化会返回false
<?php $str = 'a:9:{s:4:"time";i:1405306402;s:4:"name";s:6:"新晨";s:5:"url";s:1:"-";s:4:"word";s:1:"-";s:5:"rpage";s:29:"http://www.baidu.com/test.html";s:5:"cpage";s:1:"-";s:2:"ip";s:15:"117.151.180.150";s:7:"ip_city";s:31:"中国北京市 北京市移动";s:4:"miao";s:1:"5";}'; var_dump(unserialize($str)); // bool(false) ?>
检查序列化后的字符串,发现出问题是在两处地方
s:5:"url"
s:29:"http://www.baidu.com/test.html"
这两处应为
s:3:"url"
s:30:"http://www.baidu.com/test.html"
出现这种问题的原因是序列化数据时的编码与反序列化时的编码不一致导致,例如数据库是latin1和UTF-8字符长度不一样。
另外有可能出问题的还有单双引号,ascii字符"\0"被解析为 '\0',\0在C中是字符串的结束符等于chr(0),错误解析后算了2个字符。
\r在计算长度时也会出问题。
解决方法如下:
// utf8 function mb_unserialize($serial_str) { $serial_str= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str ); $serial_str= str_replace("\r", "", $serial_str); return unserialize($serial_str); } // ascii function asc_unserialize($serial_str) { $serial_str = preg_replace('!s:(\d+):"(.*?)";!se', '"s:".strlen("$2").":\"$2\";"', $serial_str ); $serial_str= str_replace("\r", "", $serial_str); return unserialize($serial_str); }
相关推荐
本文实例讲述了php中unserialize返回false的解决方法,分享给大家供大家参考。具体方法如下: php 提供serialize(序列化) 与unserialize(反序列化)方法。 使用serialize序列化后,再使用unserialize反序列化就可以...
PHP 反序列化的 Node.js 端口 安装 npm install unserialize 用法 var unserialize = require('unserialize'); console.log(unserialize('a:2:{s:4:"name";s:4:"Andy";s:3:"age";i:82;}')); // { name: 'Andy', ...
php 将数据序列化和反序列化其实就用到两个函数,serialize 和unserialize。 serialize 将数组格式化成有序的字符串 unserialize 将数组还原成数组 例如: $user=array('Moe','Larry','Curly'); $user=serialize($...
1. serialize和unserialize函数这两个是序列化和反序列化PHP中数据的常用函数。复制代码 代码如下:<?php$a = array(‘a’=> ‘Apple’ ,’b’ => ‘banana’, ‘c’ => ‘Coconut’);//序列化数组$s = serialize...
android(包括java)序列化一个对象传给php去做处理,或是接到php的序列化的对象在java中做处理的工具jar包以及使用方法. 使用方法: byte[] b = null;...PHPSerializer中还有unserialize方法,是反序列化
主要介绍了PHP常见的序列化与反序列化操作,结合实例形式分析了php使用serialize()及unserialize()进行序列化与反序列化相关操作技巧及注意事项,需要的朋友可以参考下
反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性.. 序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把...
反序列化 jQuery 反序列化插件 概述: 这个插件包含两个函数,它们的工作方式与 jQuery 的“serialize()”函数相反。 也就是说,“序列化”采用一种形式(或输入的集合)并为 HTTP 请求返回正确的序列化字符串,此...
序列化与反序列化 把复杂的数据类型压缩到一个字符串中 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 1.创建一个$arr数组用于储存用户基本信息,并在浏览器中输出查看结果; $arr=...
tsqlphpunserialize 在 T-SQL 中反序列化 PHP 序列化数据最初发布在 Stack Exchange 上: : noredirect=1# 我正在尝试从 Magento 订单中提取礼品卡代码。 其他一些代码使用 Magento API 从 Magento 检索订单信息作为...
PHP序列化器安装使用安装软件包: $ composer require nilportugues/serializer介绍什么是序列化? 在数据存储的上下文中,序列化是将数据结构或对象状态转换为可以存储(例如,在文件或内存缓冲区中或通过网络连接...
unserialize() 恢复原先变量 eg: $stooges = array('Moe','Larry','Curly'); $new = serialize($stooges); print_r($new);echo ; print_r(unserialize($new)); 结果:a:3:{i:0;s:3:”Moe”;i:1;s:5:”Larry”;i...
本文是关于PHP序列化/对象注入漏洞分析的短篇,里面讲述了如何获取主机的远程shell。 如果你想自行测试这个漏洞,你可以通过 XVWA 和 Kevgir 进行操作。 漏洞利用的第一步,我们开始测试目标应用...然后再进行反序列化
序列化就是将变量数据转换为字符串(跟类型转换机制不同),一般应用于存储数据(文件),然后在别的情形下恢复(反序列化) 序列化: $val = serialize($var); file_put_contents('./*.txt',$val); 反序列化: $...
主要介绍了php序列化函数serialize() 和 unserialize() 与php原生序列化方法对比,有需要的小伙伴可以参考下。
weblogic unserialize exploitjava反序列化漏洞(CVE-2015-4852)的weblogic exploit命令回显exp1.依赖组件python 2.7java2. 程序说明exploit方法来源于Freebuf的”Java反序列化漏洞之weblogic本地利用实现篇”,...
我们知道现在各大语言都有其序列化数据和反序列的方式, 比如php的serialize和unserialize函数 Python当然也有,官方库里提供了一个叫做pickle的库 字符串的序列化解释 import pickle x = "yuaneuro" y = pickle....
好吧,为这样一个简单的操作反序列化整个数组是非常低效的。 如果您正在反序列化一个小数组或者您不经常这样做,那么这可能没问题,但如果您处于重负载设置中,则必须有更好的方法。 PHPSerializer 背后的想法本质...