我得到的确切错误是:
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,否则永远不应该编辑数据库中的序列化值。