php unserialize函数反序列话数组

有没有,遇到这种情况:使用serialize函数序列化一个数组后,然后想通过unserialize函数反序话,得到该数组,可是确报错,得不到想要的结果。

从网上搜索,发现很多网友都遇到相同的问题,好像说这是unserialize函数的bug。

不过,好在有人已经解决了,我就借花献佛,将他记录下来,供大家使用:

1.假如,是utf-8的数据,请使用下面的函数反序列化(我没有验证,可以尝试下)

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);
}

2.其他编码格式的数据,请使用下面的函数反序列化(数组已验证,可以使用)

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函数反序列话数组

时间: 2024-08-29 21:28:11

php unserialize函数反序列话数组的相关文章

php序列化函数漏洞----unserialize()函数

unserialize()函数概念 unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值.返回的是转换之后的值,可为 integer.float.string.array 或 object.如果传递的字符串不可解序列化,则返回 FALSE.与之相对的函数serialize()序列化函数. 我们看一个题目题目:天网管理系统,链接: http://ctf5.shiyanbar.com/10/web1/ 1.进入题目查看网页源码 这行提示比较霸气,直接让你判断你的用户名

serialize和unserialize函数

序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性.1. serialize和unserialize函数这两个是序列化和反序列化PHP中数据的常用函数. <?php $a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = serialize($a); echo $s;

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

归约函数reduce&amp;映射数组map(笔记)

function forEach(array,action){ for(var i=0;i<array.length;i++) action(array[i]); } function reduce(combine,base,array){ forEach(array,function(element){ base=combine(base,element);}) return base; } function countZeroes(array){ function counter(total

【转载】让c++ 函数返回一个数组

在c++中是不允许数组作为函数的返回值的 int [] someFunction( ); //ILLEGAL 要想实现函数返回一个数组,那返回对应数组里面类型的指针 you must return a pointer to the array base type and have the pointer point to the array. So, the function declaration would be as follows: int* someFunction( ); //Leg

编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果

问题: 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 分析: 主要注意两点:1,判断输入是否合法:2,判断除数是否为0:3,从后往前除(真猥琐) 代码实现: 1 /* div_array.cc 2 * 2014/09/03 create 3 * 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 4 */ 5 #include <iostream> 6 using namespace std; 7 8 void div_ar

使用内存管理函数实现动态数组

C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间释放,为有效地使用内存资源提供了手段. 动态数组,指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小.其本质就是一个指向数组的指针变量. 主要用到的内存管理函数是:malloc和free. 1.分配内存函数malloc: 调用形式:(类型说明符*)malloc(size): 功     能:在内存的动态存储区中分配一块长度为size字节的连续区域. 返     回:该区域

c++函数返回一个数组

---恢复内容开始--- 调用某个函数时经常需要函数返回一个值,我们都知道c++ 的函数返回的是一个copy,所以当只返回一个值时不会出现什么问题,直接return一个copy就行了,但是如果返回一个数组,事情就变得有趣了,我最近就遇到了这个问题. 先附上代码吧: #include<iostream> using namespace std; //函数声明 int * fun1(); int * fun2(); void dispArr(int *arr ,int n); const int

10.2.3.1 以函数方式使用数组

我们先来看一个 F# 的例子,这是两个F# 库处理数组的重要的高阶函数,然后,用 C# 实现相同的功能.清单 10.12 的中脚本,先用随机数初始化一个数组,然后,计算出它们的平方. 清单 10.12 处理数组的函数式方法(F# Interactive) > let rnd = new System.Random();; val rnd : System.Random > let numbers = Array.init 5 (fun _-> rnd.Next(10));;   [1]