好,我制作了一个返回该序列化数据的代码:
a:3:{i:0;s:250:"Sistema Operativo: Windows Vista SP1 / Windows XP SP3
Procesador: Intel Core 2 Duo 1.8 Ghz, AMD Athlon X2 64 2.4 Ghz
Memoria: 1.5GB Windows Vista / 1GB Windows XP
Espacio en Disco: 16GB libres
Gráfica: 256MB NVIDIA 7900 / 256MB ATI X1900";i:1;s:281:"Sistema Operativo: Windows Vista SP1 / Windows XP SP3
MicroProcesador: Intel Core 2 Quad 2.4Ghz, AMD Phenom X3 2.1Ghz
RAM: 2.5GB Windows Vista / 2.5GB Windows XP
Espacio en Disco: 18GB libres
Gráfica: 512 MB NVIDIA 8600 / 512MB ATI 3870
Otros: DVD-ROM de doble capa";i:2;s:0:"";}
但是当我反序列化它时,它只返回1 ...
我不知道为什么......
我使用$data = (array)unserialize($quote);
,但我有一个奇怪的问题,我不知道如何解决...:'(
修改
我的序列化变量$finalreq = serialize(array(0 => $minreq, 1 => $req, 2 => $maxreq));
$ minreq,$ req和$ maxreq是$ _POST变量。
解决:
如果您遇到这种情况,您唯一需要做的就是使用称为多字节反序列化的UTF-8字符的特殊函数。
代码:
/**
* Mulit-byte Unserialize
*
* UTF-8 will screw up a serialized string
*
* @access private
* @param string
* @return string
*/
function mb_unserialize($string) {
$string = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $string);
return unserialize($string);
}
原帖:https://stackoverflow.com/a/5813058/3286975
感谢。
答案 0 :(得分:1)
它实际上正在返回false
,因为它引发了错误:
Notice: unserialize() [function.unserialize]: Error at offset 266 of 551 bytes
var_dump
- 由于错误,结果会返回bool(false)
。
序列化后您是否更改了信息?序列化数据很挑剔。在上面的数据中:
a:3:{i:0;s:250:
a:3
说“这是一个数组,有3个元素”{
表示第一个元素的开头。i:0
表示索引为零。s:250
表示接下来的250个字符是值。如果你以任何方式改变了长度,解析器就无法正确地反序列化,因为它需要250个字符....