0
この配列をある関数から別の関数に渡します


    関数componentBuildRoute(&$ query)
    {{
        $ segments = array();
        $ segments [] = $ var .. ..
        ..。
        $ str = serialize($ segments);
        $ str = urlencode($ str);
        $ segments [] = $ str;

//$segments[]に対してpreprint_rを実行した場合;
//このプリント
// **シリアル化:
//配列
//(
//[ページ]=>mostrar_clasificado
// [catid] => 3
// [category_alias] => nuevo
// [adid] => 3
// [ad_alias] => 3-way-conector-de-tubos
// [0] => a%3A5%3A%7Bs%3A4%3A%22page%22%3Bs%3A19%3A%22mostrar_clasificado%22%3Bs%3A5%3A%22catid%22%3Bs%3A1%3A%223 %22%3Bs%3A14%3A%22category_alias%22%3Bs%3A5%3A%22nuevo%22%3Bs%3A4%3A%22adid%22%3Bs%3A1%3A%223%22%3Bs%3A8%3A%22ad_alias %22%3Bs%3A23%3A%223-way-conector-de-tubos%22%3B%7D
//)**

    $segmentsを返します。
    }
関数componentParseRoute($ segments)  
    {{
//渡された$segments[]の配列に対してpreprint_r()を実行した場合;
//*このプリント
// **合格セグメント:
//配列
//(
// [0] => mostrar_clasificado
// [1] => 3
// [2] => nuevo
// [3] => 3
// [4] => 3:way-conector-de-tubos
// [5] => a:5- {s-4- "page"; s-19-" mostrar_clasificado"; s-5-"catid"; s-1- "3"; s-14-" category_alias "; s-5-" nuevo "; s-4-" adid "; s-1-" 3 "; s-8-" ad_alias "; s-23-" 3-way-conector-de-tubos "; }
//)**
        $ str = end($ segments);
        echo "PASSED ARRAY STRの最後の要素:
        "。**$str **;

//このプリント:
//合格した配列STRの最後の要素:
a:5- {s-4- "page"; s-19-" mostrar_clasificado"; s-5- "catid"; s-1- "3"; s-14-"category_alias"; s-5- " nuevo "; s-4-" adid "; s-1-" 3 "; s-8-" ad_alias "; s-23-" 3-way-conector-de-tubos ";}
// **デコードはすでにどのように行われますか?**
        $ tests = array();
        ** $ tests = unserialize($ str); **
        echo "非シリアル化テスト:";
    print_r($ tests);
//このプリント:
//非シリアル化セグメント:
//**配列なし!!! (テキストの後の空白スペース)非シリアル化配列なし**
//配列をもう一度印刷して、自分が何を考えたかを確認します

echo "SEGMENTS 2:";
    print_r($ segments);

//このプリント:
//セグメント2:
//
//配列
//(
// [0] => mostrar_clasificado
// [1] => 3
// [2] => nuevo
// [3] => 3
// [4] => 3:way-conector-de-tubos
// [5] => a:5- {s-4- "page"; s-19-" mostrar_clasificado"; s-5-"catid"; s-1- "3"; s-14-" category_alias "; s-5-" nuevo "; s-4-" adid "; s-1-" 3 "; s-8-" ad_alias "; s-23-" 3-way-conector-de-tubos "; }
//)
//配列の最後の要素を**非シリアル化**することができません
//ポインタはありますか?
//また、前に述べたように、
//なぜurlencodedなのかわかりません
//そしてシリアル化
//配列の要素、に渡されます
//2番目の関数はすでにurldecodedされています
4

2 に答える 2

0

ねえDODこのコードは正しく動作します!



function componentBuildRoute(&$query)
{
        $segments = array();
        $str = serialize(
            array(
                "page"=>"mostrar_clasificado",
                "catid"=>"3",
                "category_alias"=>"nuevo",
                "adid"=>"3",
                "ad_alias"=>"3-way-conector-de-tubos"
                )
            );
        $str = urlencode($str);
        $segments[] = $str;
        return $segments;
}
function componentParseRoute( $segments )  
{
        $str = end($segments);
        $testing = array();
        $str = urldecode($str);
        $testing = unserialize($str);
   return $testing;
}

$query = '';

$val = componentBuildRoute(&$query);
print_r($val);
echo "\n";
$val2 = componentParseRoute($val);
print_r($val2);



于 2010-12-23T09:56:56.077 に答える
0

配列セグメントを介して 2 番目の関数に渡していた文字列をシリアル化解除できませんでした。シリアル化された文字列が渡されると、渡されたデータのコア構造が変更されている可能性があることを示すインターネット上の多くの投稿を見つけました。技術的なことはわかりません。しかし、var_dump(sunserialized_array) を実行すると、false になりました。

私が見つけた情報の一部については、次のリンクを投稿し
ます
。 .php#40757

私の最初の目標は、配列のシリアル化されたバージョンを同じ配列の文字列要素として渡し、シリアル化を解除して 2 番目の関数で使用することでした。そこで、質問の配列の収集されたキーと変数 (質問コードの配列 $segments) を使用して文字列を作成し、渡される配列に $string_to_be_parsed を追加しました。2 番目の関数で $string_to_parsed=end($segments) を取得しました。これが良い点です。この関数を使用して配列parse_str($str, $segments);を再作成します。

私はこの解決策を見つけました: PHPでunserializeがfalseを返し続けるのはなぜですか?

そのため、必要なものをシリアル化解除できませんでしたが、目標を達成する別の方法を見つけました。

于 2010-12-23T20:27:47.910 に答える