37

シリアル化されたphp文字列の詳細が文書化されているリソースを誰かが教えてくれるかどうか疑問に思っていました. 基本的にフォーマット/構造を知りたいので、VB.NETで関数を記述してシリアル化/逆シリアル化できます。

ありがとう!

4

2 に答える 2

71

基本的な構造は次のとおりです。

スカラー型:

  1. ブール値は次のようにシリアル化されます。

    b:<i>;
    

    ここで、 (false) または(true)<i>のいずれかの値を持つ整数です。01

  2. 整数は次のようにシリアル化されます。

    i:<i>;
    

    <i>整数値です。

  3. float は ( ddouble を意味する) 次のようにシリアル化されます。

    d:<f>;
    

    <f>float 値です。

  4. 文字列は次のようにシリアル化されます。

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

    ここ<i>で、 は の文字列の長さを表す整数で<s><s>は文字列値です。

特別なタイプ:

  1. null次のように単純にシリアル化されます。

    N;
    

複合タイプ:

  1. 配列は次のようにシリアル化されます。

    a:<i>:{<elements>}
    

    ここ<i>で、 は配列内の要素数を表す整数で、<elements>0 個以上のシリアル化されたキーと値のペアです。

    <key><value>
    

    ここで<key>、シリアライズされたスカラー型と、シリアライズ<value>可能な任意の値を表します。

  2. オブジェクトは次のようにシリアル化されます。

    O:<i>:"<s>":<i>:{<properties>}
    

    ここで、最初の<i>は の文字列の長さを表す整数で<s><s>は完全修飾クラス名です (完全な名前空間が前に付加されたクラス名)。2 番目<i>は、オブジェクト プロパティの数を表す整数です。<properties>ゼロ個以上のシリアル化された名前と値のペア:

    <name><value>
    

    ここ<name>で、プロパティ名を表すシリアル化された文字列と、シリアル化<value>可能な任意の値です。

    ただし、キャッチが<name>あります:

    <name>として表されます

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

    <i>文字列の長さを表す整数です<s>。ただし、の値は<s>、プロパティの可視性によって異なります。

    を。With public properties<s>は、プロパティの単純な名前です。

    b. ただし、保護されたプロパティでは、2の文字で囲まれたアスタリスク(つまり)<s>を前に付けた、プロパティの単純な名前です。\0*\0NULchr(0)

    c. また、プライベートプロパティの場合、<s>はプロパティの単純な名前で、先頭に\0<s>\0—が追加され、2文字で<s>囲まれます。 は完全修飾クラス名です。NUL<s>


参照を表すなど、他にもいくつかのケースがありますが、R:<i>;ここでは言及していません (正直なところ、その正確な仕組みをまだ理解していないためです)。 .

于 2013-01-12T22:34:54.767 に答える
11

phpinternalsbook でこのページが完全に完成していることがわかりました。また、インターフェイスを実装するクラスの代替シリアル化形式とSerializable、形式指定子の意味も示しRます。

于 2014-06-05T09:42:56.773 に答える