37

我想知道是否有人可以将我指向一个记录了序列化 php 字符串详细信息的资源。我基本上想知道格式/结构,所以我可以在 VB.NET 中编写一个函数来序列化/反序列化它。

谢谢!

4

2 回答 2

71

基本结构如下:

标量类型:

  1. 布尔值被序列化为:

    b:<i>;
    

    其中<i>是一个值为0(false) 或1(true) 的整数。

  2. 整数被序列化为:

    i:<i>;
    

    其中<i>是整数值。

  3. 浮点数被序列化为(d含义为双):

    d:<f>;
    

    <f>浮点值在哪里。

  4. 字符串被序列化为:

    s:<i>:"<s>";
    

    其中<i>是表示 的字符串长度的整数<s><s>是字符串值。

特殊类型:

  1. null被简单地序列化为:

    N;
    

复合类型:

  1. 数组被序列化为:

    a:<i>:{<elements>}
    

    其中<i>是一个整数,表示数组中元素的数量,以及<elements>零个或多个序列化键值对:

    <key><value>
    

    其中<key>表示序列化的标量类型,以及<value>任何可序列化的值。

  2. 对象被序列化为:

    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 的序列化机制有一个不错的了解.

于 2013-01-12T22:34:54.767 回答
11

在 phpinternalsbook 上发现这个页面非常完整。它还显示了实现Serializable接口的类的替代序列化格式,以及R格式说明符的含义。

于 2014-06-05T09:42:56.773 回答