PHP unserialize函数总是返回1

时间:2014-02-22 23:46:50

标签: php arrays serialization

,我制作了一个返回该序列化数据的代码:

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

感谢。

1 个答案:

答案 0 :(得分:1)

它实际上正在返回false,因为它引发了错误:

Notice: unserialize() [function.unserialize]: Error at offset 266 of 551 bytes

var_dump - 由于错误,结果会返回bool(false)

序列化后您是否更改了信息?序列化数据很挑剔。在上面的数据中:

a:3:{i:0;s:250:
  1. a:3说“这是一个数组,有3个元素”
  2. {表示第一个元素的开头。
  3. i:0表示索引为零。
  4. s:250表示接下来的250个字符是值。
  5. 如果你以任何方式改变了长度,解析器就无法正确地反序列化,因为它需要250个字符....