我想知道是否有人可以将我指向一个记录了序列化 php 字符串详细信息的资源。我基本上想知道格式/结构,所以我可以在 VB.NET 中编写一个函数来序列化/反序列化它。
谢谢!
我想知道是否有人可以将我指向一个记录了序列化 php 字符串详细信息的资源。我基本上想知道格式/结构,所以我可以在 VB.NET 中编写一个函数来序列化/反序列化它。
谢谢!
基本结构如下:
标量类型:
布尔值被序列化为:
b:<i>;
其中<i>
是一个值为0
(false) 或1
(true) 的整数。
整数被序列化为:
i:<i>;
其中<i>
是整数值。
浮点数被序列化为(d
含义为双):
d:<f>;
<f>
浮点值在哪里。
字符串被序列化为:
s:<i>:"<s>";
其中<i>
是表示 的字符串长度的整数<s>
,<s>
是字符串值。
特殊类型:
null
被简单地序列化为:
N;
复合类型:
数组被序列化为:
a:<i>:{<elements>}
其中<i>
是一个整数,表示数组中元素的数量,以及<elements>
零个或多个序列化键值对:
<key><value>
其中<key>
表示序列化的标量类型,以及<value>
任何可序列化的值。
对象被序列化为:
O:<i>:"<s>":<i>:{<properties>}
其中第一个<i>
是表示 的字符串长度的整数<s>
,并且<s>
是完全限定的类名(类名前面带有完整的命名空间)。第二个<i>
是一个整数,表示对象属性的数量。<properties>
是零个或多个序列化名称值对:
<name><value>
其中<name>
是表示属性名称的序列化字符串,以及<value>
任何可序列化的值。
不过有一个问题<name>
:
<name>
表示为
s:<i>:"<s>";
其中<i>
是一个整数,表示 的字符串长度<s>
。<s>
但是每个属性的可见性的值不同:
一种。公共属性<s>
是属性的简单名称。
湾。然而,受保护<s>
的属性是属性的简单名称,前面带有一个\0*\0
星号,包含在两个NUL
字符中(即chr(0)
)。
C。而对于私有属性,<s>
是属性的简单名称,以\0<s>\0
-开头,用两个字符<s>
括起来,其中是完全限定的类名。NUL
<s>
还有一些其他情况,例如R:<i>;
,代表引用,我在这里没有提到(因为老实说我还没有弄清楚它的确切工作原理),但这应该让您对 PHP 的序列化机制有一个不错的了解.
我在 phpinternalsbook 上发现这个页面非常完整。它还显示了实现Serializable
接口的类的替代序列化格式,以及R
格式说明符的含义。