2

我得到的确切错误是:

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));

感谢您的帮助和建议!

4

1 回答 1

3

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

Foo不是 6 个字符长...因此永远不会按预期解析。

尝试:s:3:"Foo"

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

于 2013-06-27T16:30:59.357 回答