序列化/反序列化php对象

时间:2012-04-01 09:38:11

标签: php html forms serialization

我无法理解PHP中序列化/反序列化的概念。

假设我有一个非常简单的PHP对象(类someObject),并且在设置该对象的属性之后我想序列化它:

所以我打电话给:serialize($someObject);

我想通过html表单将此序列化对象转移到另一个php skript中,因此我将其设置为隐藏值:

<input type="hidden" name="someObject" value="<? print $someObject; ?>"

在下一个php脚本中,我想使用unserialize来获取我的对象并将其传输,例如到数据库。

$unserialize = unserialize($_POST['someObject'])

但是这总是返回BOOL(假) - 所以我在这里缺少什么?

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

序列化字符串如下所示:

O:1:"a":1:{s:3:"foo";s:3:"100";}

您必须urlencode / urldecode序列化字符串,以防止序列化表示中的任何字符破坏您的标记。看看你的页面来源。第一个引用可能会结束您的HTML值属性。所以你有类似的东西:

<input ... value="O:1:"a":1:{s:3:"foo";s:3:"100";}">

因此,您的$_POST永远不会包含完整的序列化字符串,只会包含O:1:

如果这不是问题,请确保首先从对象获得序列化字符串。另请注意,某些对象在(未)序列化时无法序列化或具有已修改的行为。请参阅Notes in PHP Manual for serialize for details.

如果您不需要在运行PHP的不同服务器上发送对象,请考虑将它们保存在Session中。它更容易,更不容易出错,更安全,因为物体在运输过程中不会被篡改。

答案 1 :(得分:1)

在取消序列化()对象

之前,需要在第二个脚本中定义类