gpt4 book ai didi

php - 序列化/反序列化 php 对象

转载 作者:可可西里 更新时间:2023-10-31 22:46:23 27 4
gpt4 key购买 nike

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

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

所以我调用:serialize($someObject);

我想通过 html 表单将这个序列化对象传输到另一个 php skript,所以我将它设置为隐藏值:

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

在下一个 php 脚本中,我想使用反序列化来取回我的对象​​并将其传输,例如到数据库。

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

但这总是返回 BOOL(false) - 那么我在这里缺少什么?

感谢您的帮助!

最佳答案

一个序列化的字符串看起来像这样:

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 中。反而。它更容易、更不容易出错并且更安全,因为对象在传输过程中无法被篡改。

关于php - 序列化/反序列化 php 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9963382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com