避免 php serialize() 中出现空字节

ner*_*ell 6 php serialization amazon-sqs

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

Nic*_*ico 2

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

\n

正如Michael - sqlbot评论中所解释的,base64_encode函数正确处理 NUL 字节。

\n

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

\n
base64_encode(serialize($object));\n
Run Code Online (Sandbox Code Playgroud)\n

在“反序列化”方面:

\n
unserialize(base64_decode($object));\n
Run Code Online (Sandbox Code Playgroud)\n

如果想了解serialize函数内部是如何工作的,可以阅读\n PHP Internals Book: Serialization :

\n
\n

上述序列化字符串中的 \\0 是 NUL 字节。正如您所看到的,私有和受保护成员使用相当特殊的名称进行序列化:私有属性以 \\0ClassName\\0 为前缀,受保护属性以 \\0*\\0 为前缀。这些名称是名称修改的结果,这是我们\xe2\x80\x99 将在后面的部分中介绍的内容。

\n
\n

  • 不应该在反序列化端进行 unserialize(base64_decode($object)) 吗? (2认同)