【问题标题】:PHP unserialize function always returns 1PHP 反序列化函数总是返回 1
【发布时间】:2014-03-24 14:35:45
【问题描述】:

好吧,我编写了一个返回序列化数据的代码:

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

谢谢。

【问题讨论】:

  • 你的字符串好吗?我有:PHP Notice: unserialize(): Error at offset 266 of 551 bytes
  • 我之前回显过它,它返回给我...但是在该字符串的反序列化时出现任何错误它只返回 1。:(
  • 请检查serialize($your_object);是否与上面的字符串相同。

标签: php arrays serialization


【解决方案1】:

它实际上是返回false,因为它抛出了一个错误:

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

var_dump-ing结果返回bool(false)由于错误。

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

a:3:{i:0;s:250:
  1. a:3 表示“这是一个包含 3 个元素的数组”
  2. { 表示第一个元素的开始。
  3. i:0 表示索引为零。
  4. s:250 表示接下来的 250 个字符是值。

如果您以任何方式更改了长度,解析器将无法正确反序列化,因为它需要 250 个字符......

【讨论】:

  • 它看起来像一个错误,因为我只使用序列化函数来获取那个奇怪的字符串......那我该怎么办?
  • 我解决了这个问题:stackoverflow.com/a/5813058/3286975 无论如何感谢您的指导。 :P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多