我正在 php 5.2 中使用
serialize()
/unserialize()
函数。要存储的文本通过表单发布。顺便说一句,前后没有空格。即使文本包含 "
或 '
,它也会成功序列化。问题是它不unserialize()
回来。我做错了什么?
David Walsh 有一个简单的解决方案:
//to safely serialize
$encoded_serialized_string = base64_encode(serialize($your_array));
//to unserialize
$array_restored = unserialize(base64_decode($encoded_serialized_string));
这可能是对这种行为的回应。 因此,要反序列化,您可能必须先执行 stripslashes() :
if (get_magic_quotes_gpc()) $data = stripslashes($data);
尽管在 5.2 系统上几乎不可能启用 magic_quotes...
为了确定某些事情,您必须找到初始数据和返回数据之间的差异。
但是无论如何,为什么不使用会话而不是向浏览器发送数据并返回数据呢?会话确实更快、更安全。
addslashes
,反序列化时,应使用 stripslashes
函数。
示例:
if (get_magic_quotes_gpc())
{
serialize($variable);
}
else
{
addslashes(serialize($variable));
}
if (get_magic_quotes_gpc())
{
stripslashes(unserialize($variable));
}
else
{
unserialize($variable);
}
在引号中添加斜杠可以解决问题。看看我的代码: http://codepad.org/7JWa2BT6