urb*_*ter 33 php string serialization
我想知道是否有人可以指向一个资源,其中记录了序列化的PHP字符串的详细信息.我基本上想知道格式/结构,所以我可以在VB.NET中编写一个函数来序列化/反序列化它.
谢谢!
Dec*_*ler 63
基本结构如下:
标量类型:
布尔值序列化为:
b:<i>;
Run Code Online (Sandbox Code Playgroud)
where <i>是一个值为0(false)或1(true)的整数.
整数序列化为:
i:<i>;
Run Code Online (Sandbox Code Playgroud)
其中<i>是整数值.
浮点数被序列化为(d含义为double):
d:<f>;
Run Code Online (Sandbox Code Playgroud)
<f>浮点值在哪里.
字符串被序列化为:
s:<i>:"<s>";
Run Code Online (Sandbox Code Playgroud)
where <i>是一个表示字符串长度的整数<s>,<s>是字符串值.
特殊类型:
null 简单地序列化为:
N;
Run Code Online (Sandbox Code Playgroud)复合类型:
数组序列化为:
a:<i>:{<elements>}
Run Code Online (Sandbox Code Playgroud)
where <i>是一个整数,表示数组中元素的数量,以及<elements>零个或多个序列化键值对:
<key><value>
Run Code Online (Sandbox Code Playgroud)
where <key>表示序列化标量类型,以及<value>可序列化的任何值.
对象序列化为:
O:<i>:"<s>":<i>:{<properties>}
Run Code Online (Sandbox Code Playgroud)
其中第一个<i>是表示字符串长度的整数<s>,并且<s>是完全限定的类名(前面带有完整命名空间的类名).第二个<i>是表示对象属性数的整数.<properties>是零个或多个序列化的名称值对:
<name><value>
Run Code Online (Sandbox Code Playgroud)
where <name>是表示属性名称的序列化字符串,以及<value>可序列化的任何值.
虽然有一个问题<name>:
<name> 表示为
s:<i>:"<s>";
Run Code Online (Sandbox Code Playgroud)
where <i>是一个表示字符串长度的整数<s>.但<s>每个属性可见性的值不同:
一个.随着公共属性<s>是属性的简单名称.
湾 但是,对于受保护的属性,<s>该属性的简单名称前缀为\0*\0- 星号,用两个NUL字符(即chr(0))括起来.
C.对于私有属性,<s>是属性的简单名称,前缀为\0<s>\0- <s>,用两个NUL字符括起来,其中<s>是完全限定的类名.
还有一些其他的例子,比如R:<i>;代表引用,我在这里没有提到(因为我老实说还没有弄清楚它的确切工作方式),但这应该会让你对PHP的序列化机制有一个体面的想法.