在php中反序列化问题

时间:2010-05-22 14:22:03

标签: php serialization

我在php 5.2中使用序列化/反序列化函数。要存储的文本通过表单发布。顺便说一下,之前或之后没有空格。如果文本包含“或”它成功序列化。问题是它没有反序列化。我做错了什么?

4 个答案:

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

http://davidwalsh.name/php-serialize-unserialize-issues

答案 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