我使用php serialize()序列化php对象。但是,它会在受保护成员变量的结果中添加空字节。然后,此结果将作为消息传递到Amazon SQS队列。问题是SQS不支持消息体中的空字节。有没有办法摆脱空字节。我必须确保结果在另一端仍然是不可序的。
答案 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 为前缀。这些名称是名称修改的结果,我们将在后面的部分中介绍。