我想知道是否有人可以指向一个资源,其中记录了序列化php字符串的详细信息。我基本上想知道格式/结构,所以我可以在VB.NET中编写一个函数来序列化/反序列化它。
谢谢!
答案 0 :(得分:59)
基本结构如下:
标量类型:
布尔值被序列化为:
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
- 一个asterix,用两个NUL
字符括起来(即{{ 1}})。
℃。使用私有属性,chr(0)
是该属性的简单名称,前缀为<s>
- \0<s>\0
,用两个<s>
字符括起来,其中NUL
是完全限定的类名。
还有一些其他案例,例如<s>
,代表了我在这里没有提到的引用(因为我老实说还没有弄清楚它的确切运作方式),但这应该给出你对PHP的序列化机制有个好主意。
答案 1 :(得分:10)
我发现this page at phpinternalsbook非常完整。它还显示了实现Serializable
接口的类的替代序列化格式,以及R
格式说明符的含义。