当serialize()工作正常时,php中的unserialize()问题

问题描述 投票:0回答:4

我正在 php 5.2 中使用

serialize()
/
unserialize()
函数。要存储的文本通过表单发布。顺便说一句,前后没有空格。即使文本包含
"
'
,它也会成功序列化。问题是它不
unserialize()
回来。我做错了什么?

php serialization
4个回答
10
投票

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


4
投票

这可能是对这种行为的回应。 因此,要反序列化,您可能必须先执行 stripslashes() :

if (get_magic_quotes_gpc()) $data = stripslashes($data);

尽管在 5.2 系统上几乎不可能启用 magic_quotes...
为了确定某些事情,您必须找到初始数据和返回数据之间的差异。

但是无论如何,为什么不使用会话而不是向浏览器发送数据并返回数据呢?会话确实更快、更安全。


0
投票

序列化时,应使用

addslashes
,反序列化时,应使用
stripslashes
函数。

示例:

if (get_magic_quotes_gpc())
{
  serialize($variable);
}
else
{
  addslashes(serialize($variable));
}

if (get_magic_quotes_gpc())
{
  stripslashes(unserialize($variable));
}
else
{
  unserialize($variable);
}

-1
投票

在引号中添加斜杠可以解决问题。看看我的代码: http://codepad.org/7JWa2BT6

© www.soinside.com 2019 - 2024. All rights reserved.