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