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