序列化PHP字符串的结构

时间:2013-01-12 21:02:33

标签: php string serialization

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

谢谢!

2 个答案:

答案 0 :(得分:59)

基本结构如下:

标量类型:

  1. 布尔值被序列化为:

    b:<i>;
    

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

  2. 整数序列化为:

    i:<i>;
    

    其中<i>是整数值。

  3. 浮点数序列化为(d表示双倍):

    d:<f>;
    

    其中<f>是浮点值。

  4. 字符串被序列化为:

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

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

  5. 特殊类型:

    1. null简单地序列化为:

      N;
      
    2. 复合类型:

      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 - 一个asterix,用两个NUL字符括起来(即{{ 1}})。

        ℃。使用私有属性,chr(0)是该属性的简单名称,前缀为<s> - \0<s>\0,用两个<s>字符括起来,其中NUL是完全限定的类名。


      3. 还有一些其他案例,例如<s>,代表了我在这里没有提到的引用(因为我老实说还没有弄清楚它的确切运作方式),但这应该给出你对PHP的序列化机制有个好主意。

答案 1 :(得分:10)

我发现this page at phpinternalsbook非常完整。它还显示了实现Serializable接口的类的替代序列化格式,以及R格式说明符的含义。