Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
序列化PHP字符串的结构_Php_String_Serialization - Fatal编程技术网

序列化PHP字符串的结构

序列化PHP字符串的结构,php,string,serialization,Php,String,Serialization,我想知道是否有人可以向我指出一个资源,其中记录了序列化php字符串的详细信息。我基本上想知道格式/结构,这样我就可以在VB.NET中编写一个函数来序列化/反序列化它 谢谢 基本结构如下: 标量类型: 布尔值序列化为: b:<i>; 其中是整数值 浮点数序列化为(带d表示双精度): 复合类型: 数组序列化为: i:<i>; s:<i>:"<s>"; N; a:<i>:{<elements>} O:<i>

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


谢谢

基本结构如下:

标量类型:

  • 布尔值序列化为:

    b:<i>;
    
    其中
    是整数值

  • 浮点数序列化为(带
    d
    表示双精度):

  • 复合类型:

  • 数组序列化为:

    i:<i>;
    
    s:<i>:"<s>";
    
    N;
    
    a:<i>:{<elements>}
    
    O:<i>:"<s>":<i>:{<properties>}
    
    a::{}
    
    其中,
    是一个整数,表示数组中的元素数,
    零个或多个序列化键值对:

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

  • 对象序列化为:

    i:<i>;
    
    s:<i>:"<s>";
    
    N;
    
    a:<i>:{<elements>}
    
    O:<i>:"<s>":<i>:{<properties>}
    
    O::”“:{}
    
    其中,第一个
    是一个整数,表示
    的字符串长度,
    是完全限定类名(类名前面有完整名称空间)。第二个
    是一个整数,表示对象属性的数量<代码>是零个或多个序列化的名称-值对:

    <key><value>
    
    <name><value>
    
    
    
    其中,
    是表示属性名称的序列化字符串,
    是任何可序列化的值

    不过
    有一个陷阱:

    表示为

    s:<i>:"<s>";
    
    s::“”;
    
    其中,
    是一个整数,表示
    的字符串长度。但是
    的值因属性的可见性而异:

    a。属性
    是属性的简单名称

    b。对于受保护的属性,
    是属性的简单名称,前面有
    \0*\0
    -一个星号,包含在两个
    NUL
    字符中(即
    chr(0)

    c。对于private属性,
    是属性的简单名称,前面是
    \0\0
    -
    ,包含在两个
    NUL
    字符中,其中
    是完全限定的类名



  • 还有一些其他的情况,例如
    R:,表示引用,我在这里没有提到(因为我还没有弄清楚它的确切工作原理),但这应该会让您对PHP的序列化机制有一个很好的了解。

    我发现它相当完整。它还显示了实现
    Serializable
    接口的类的可选序列化格式,以及
    R
    格式说明符的含义。

    改用JSON(
    echo JSON_encode($arr);
    )。在我看来,PHP本机序列化程序很奇怪,JSON得到了大量支持,并且更易于使用@JaredF是一个没有帮助的评论,因为提问者没有指定一个用例来表明格式的改变是可能的,甚至是可取的。JSON与所问问题完全正交。此外,对于许多用例,JSON是不合适的序列化格式,例如,如果存在递归或数组键的顺序很重要。如果不理解这些限制,JSON不应该被视为默认的go-to格式。这是一个非常有用的页面。谢谢。关于公共和受保护财产名称的好信息!我在PHP序列化文档中找不到它。@Danogentili感谢您建议的编辑。看起来不错。然而,在批准它之前,您是否可以为大写的R场景提供一个测试用例?我无法在PHP5.5.9中重现这一点。这可能是PHP5.6还是PHP7的行为?提前谢谢。我甚至可以在PHP4.4.9上重现这一点:缺少信息:字符串中的一些特殊字符是如何转义的(特别是双引号)。