我得到的确切错误是:
ErrorException [注意]:unserialize():错误5偏移量为59个字节
从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和stripslashes,但似乎没有任何效果。
感谢任何帮助!
序列化的字符串有一个类型,我在这里粘贴它以保护实际显示名称的隐私。这是实际的字符串:
a:1:{s:12:"display_name";s:3:"Foo";}
感谢@robw指出这一点。
我现在通过html_entity_decode()
运行序列化数据:
$unserialized = unserialize(html_entity_decode($serialized, ENT_QUOTES));
感谢您的帮助和建议!
答案 0 :(得分:2)
您的问题出在此处:s:6:"Foo"
Foo
长度不是6个字符...因此永远不会按预期进行解析。
尝试:s:3:"Foo"
PS:这看起来像你在MySQL中编辑数据,然后当你的应用程序试图解析它时,它会出错。除非您100%确定已根据TYPE和VALUE修改了LENGTH,否则不应编辑数据库中的序列化值。