我想知道是否有人可以将我指向一个记录了序列化 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格式说明符的含义。