PHP unserialize()偏移处出错


PHP unserialize() Error at Offset

我得到的确切错误是:

ErrorException[注意]:unserialize():偏移量为59字节的5处出错

MySQL中TEXT字段返回的序列化数据为(编码:utf8,引擎:InnoDB):

a:1:{s:12:"display_name";s:6:"Foo";}

取消序列化后的输出为:

array(1) { [0]=> bool(false) }

我期待着这样的东西:

array(1) { ["display_name"]=> string(6) "Foo" }

我在Mac OS 10.8.4上使用FuelPHP 1.6.1、PHP 5.4.10、MySQL 5.5.29、InnoDB 1.1.8。一些序列化的条目可以进行非序列化,而另一些则不行,如果我复制一个有效的条目并粘贴到一个无效的条目中,则会显示相同的错误。我认为这是一个字符问题,我已经尝试过将其编码为utf8、urlencode和stripslash,但似乎什么都不起作用。

感谢您的帮助

更新

序列化的字符串有一个类型,为了隐私起见,我在将它粘贴到实际显示名称时这样做了。这是实际字符串:

a:1:{s:12:"display_name";s:3:"Foo";}

感谢@robw指出这一点

更新&答案

我现在正在通过html_entity_decode()运行序列化数据,如下所示:

$unserialized = unserialize(html_entity_decode($serialized, ENT_QUOTES));

感谢您的帮助和建议

您的问题在这里:s:6:"Foo"

Foo不是6个字符长。。。所以这永远不会像预期的那样解析。

尝试:s:3:"Foo"

PS:这看起来像是你在MySQL中编辑了数据,然后当你的应用程序试图解析它时,它出错了。除非您100%确定已根据TYPE和value修改了LENGTH,否则永远不应该编辑数据库中的序列化值。