避免php serialize()中的空字节

时间:2017-05-02 06:04:15

标签: php serialization amazon-sqs

我使用php serialize()序列化php对象。但是,它会在受保护成员变量的结果中添加空字节。然后,此结果将作为消息传递到Amazon SQS队列。问题是SQS不支持消息体中的空字节。有没有办法摆脱空字节。我必须确保结果在另一端仍然是不可序的。

1 个答案:

答案 0 :(得分:0)

我在尝试序列化对象时遇到了同样的问题。

Michael - sqlbot 注释中所述,base64_encode 函数正在正确处理 NUL 字节。

在“序列化”方面你应该这样做:

base64_encode(serialize($object));

在“反序列化”方面:

base64_decode(unserialize($object));

如果你想知道 serialize 函数内部是如何工作的,你可以阅读 PHP Internals Book: Serialization

<块引用>

上面序列化字符串中的\0 是NUL 字节。如您所见,私有成员和受保护成员被序列化为相当奇特的名称:私有属性以 \0ClassName\0 为前缀,受保护的属性以 \0*\0 为前缀。这些名称是名称修改的结果,我们将在后面的部分中介绍。