php数组反序列化失败,求解!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php数组反序列化失败,求解!!!相关的知识,希望对你有一定的参考价值。

<?php
$str = <<<E
fwejfo
策划
fewf
fewf

ewfewf
*%&5
E;
$arr = array('a'=>'aa','b'=>20,'c'=>'测试ljfiewojfowjfo分为丰富32&*%*&%*%%875khuiehf',10=>$str);
echo serialize($arr);
echo '<br/>';
//输出结果
//a:4:s:1:"a";s:2:"aa";s:1:"b";i:20;s:1:"c";s:47:"测试ljfiewojfowjfo分为丰富32&*%*&%*%%875khuiehf";i:10;s:40:"fwejfo 策划 fewf fewf ewfewf *%&5";
var_dump(unserialize(serialize($arr)));
//以上代码正确,能反序列化
echo "<br/>";
var_dump(unserialize('a:4:s:1:"a";s:2:"aa";s:1:"b";i:20;s:1:"c";s:47:"测试ljfiewojfowjfo分为丰富32&*%*&%*%%875khuiehf";i:10;s:42:"fwejfo 策划送 fewf fewf ewfewf *%&5";'));
//以上代码反序列化失败,返回结果bool(false),求解,为什么不能反序列化
?>

unserialize()解序列化函数里面要用实际长度!根据strlen返回的“实际长度”进行修改。
最后几行,改为:
echo "<br/>";
echo "实际长度=".strlen("fwejfo 策划送 fewf fewf ewfewf *%&5"); //输出35
echo "<p>";
var_dump(unserialize('a:4:s:1:"a";s:2:"aa";s:1:"b";i:20;s:1:"c";s:47:"测试ljfiewojfowjfo分为丰富32&*%*&%*%%875khuiehf";i:10;s:35:"fwejfo 策划送 fewf fewf ewfewf *%&5";'));
测试正确!
如果传递的字符串参数,解序列化失败,则返回 FALSE。
参考技术A 你调整序列化后的格式了。 如果你将序列化后返回的字符串返回到一个变量中,然后反序列化就是正确的。或者你直接粘贴过来也是对的。例如
var_dump(unserialize('a:4:s:1:"a";s:2:"aa";s:1:"b";i:20;s:1:"c";s:53:"测试ljfiewojfowjfo分为丰富32&*%*&%*%%875khuiehf";i:10;s:36:"fwejfo
策划
fewf
fewf

ewfewf
*%&5";'));

但是你调整格式后 就不行了
参考技术B 和$str没有关系吧!
我试过了,把$arr序列化的结果粘贴,然后反序列化是没问题的,估计你那个地方差了个别的字符。

以上是关于php数组反序列化失败,求解!!!的主要内容,如果未能解决你的问题,请参考以下文章

JSON PHP中,Json字符串反序列化成对象/数组的方法

PHP反序列化因非编码字符而失败?

反序列化失败:base-64 字符数组的长度无效

PHP数组序列化和反序列化

理解PHP数组的序列化和反序列化

php如何循环反序列化?