0

次のような文字列が mysql テーブルに保存されています。

?name1=value1&name2=value2&name3=value3

元々、このデータは GET データを別のスクリプトに送信するためにのみ使用される予定でしたが、今では他の目的で必要になっています。

これらのペアを変数または配列に変換するための事前定義された関数が PHP にありますか? または手動で行う必要がありますか?

4

2 に答える 2

6

(名前の悪い) PHP 関数parse_strでこれを行うことができますが、最初の疑問符を最初に削除する必要があります。

$arr = array();
parse_str($str, $arr);
print_r($arr);

マニュアルページでほのめかされているこの関数には、いくつかの注意事項があります。

  • 2 番目の配列パラメーターなしで呼び出すと、値が現在のスコープにローカル変数として書き込まれます。プログラムに既に存在する変数の値を変更する可能性のあるキーが文字列に含まれている場合、これは危険です。
  • このmagic_quotes_gpc設定は、この関数の動作に影響します。これは、クエリ文字列と urlencoded POST 本文をデコードするために PHP によって内部的に使用されるルーチンであるためです。

設定の影響を受けない移植可能なソリューションが必要な場合は、値のエンコーディングを処理するためmagic_quotes_gpcに使用して、デコード関数を手動で記述するのがかなり簡単です。urldecode

function parseQueryString($queryString) {
    $result = array();
    $pairs = explode("&", $queryString);
    foreach ($pairs as $pair) {
        $pairArr = split("=", $pair, 2);
        $result[urldecode($pairArr[0])] = urldecode($pairArr[1]);
    }
    return $result;
}

このソリューションはおそらく組み込みparse_args関数よりも若干遅くなりますが、PHP の構成方法に関係なく動作が一貫しているという利点があります。もちろん?、最初から を取り除く必要がありますが、これはどちらの例にも含まれていません。

于 2013-03-30T06:18:19.107 に答える
1

Var_export 役に立つかもしれません。

$arr=?name1=value1&name2=value2&name3=value3
var_export($arr);
于 2013-03-30T06:22:15.977 に答える