我的应用程序中有这个功能:
public function direct($theTree)
{
$aTreeRoot = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $theTree);
return unserialize($aTreeRoot);
}
它永远不会返回false,但在错误日志中会出现错误,表示返回false。
但是,我无法在我的应用程序中复制错误。我正在尝试一切可能的方式,但它始终有效。
这个功能有问题吗?
$theTree
来自会话。
编辑:正则表达式是因为:unserialize
- 在评论中搜索我的正则表达式。它应该解决一个问题。
答案 0 :(得分:39)
我之前遇到过类似的问题。我告诉你我是如何解决它的。
序列化数据后,应用base64_encode() 例如
$txt = base64_encode(serialize($txt));
当你反序列化它时
e.g。
$txt = unserialize(base64_decode($txt));
试试这个。希望也为你工作。祝你好运
答案 1 :(得分:1)
生产和本地计算机上magic_quotes_gpc
的值是否相同?
答案 2 :(得分:1)
我的代码上有一些随机行为,但我想我发现了原因。我使用的是UTF-8字符集,在我的生产服务器中,它似乎产生了这些问题。 试试这个:
$txt = unserialize(utf8_encode($aTreeRoot));
为我工作,希望它也适合你
答案 3 :(得分:0)
我相信转发您序列化的数据也可以替代base64。
$data = serialize($results);
$encoded = htmlentities($data);
echo '<input type="hidden" name="data" value="'.$encoded.'">';
答案 4 :(得分:0)
我有类似的问题。原来数据库中存储序列化数组的列的归类为:latin1_swedish_ci
我将序列化数据列的排序规则更改为:utf8_bin
,然后重新保存数据,瞧-问题已解决。
答案 5 :(得分:0)
对我来说,问题是要解串的字符串需要修剪!错误消息在这种情况下没有帮助,我通过查看其他代码偶然发现了该解决方案。
Foo: data
Bar: data
Closure: data