PHPでは、URLのパラメータを分解して取得できる便利な関数があります。
parse_url()
を使えば、Amazonのような&
(アンド)で繋がれた長いURLパラメータも項目ごとに取得できて便利です。
parse_url関数
文字列を処理して変数に代入します。
以下のようなURLがあるとして?
(クエスチョンマーク)以降のパラメータを分割してみます。
http://www.flatflag.nir87.com?source=google&user_id=testuser
URLパラメータを分割して取得
それではURLパラメータを取得してみましょう。
1 2 3 4 5 6 7 8 9 |
// URLパラメータの部分だけを変数に格納 $param = "source=google&user_id=testuser"; // parse_strで分解処理 parse_str($param); // パラメータの項目に$マークを付けて変数として出力 echo $source; echo $user_id; |
google
testuser
上記のようにURLパラメータの値を分割して出力できました。
これは便利ですね。
ただ、パラメータの項目名がそのまま変数名となってしまうため、セキュリティ的に怖いですね。
URLパラメータを配列で取得
上記では、URLに記述されているパラメータがそのまま変数名となりましたが、独自の変数名を付けた配列で取得できます。
こちらの方法がいいでしょう。
1 2 3 4 5 6 7 8 9 |
// URLパラメータの部分だけを変数に格納 $param = "source=google&user_id=testuser"; // parse_strで分解処理し、第二引数で配列の変数名を指定 parse_str($param, $str); // 配列の要素として出力 print_r($str['source']); print_r($str['user_id']); |
google
testuser
結果は先ほどと同じでしたが、独自の変数名を付けた配列で出力しているので、より安全ですね。
parse_str関数の構文
parse_str ( 分解対象のパラメータ [ , 配列の変数名 ]([ ]は省略可));
第二引数の配列の変数名を指定するかしないかで、以下のようになります。
- 第二引数を省略した場合は文字列となり、変数名 = 値となる
string(30) “source=google&user_id=testuser” - 第二引数を指定した場合は配列となり、キー=>値となる
array(2) { [“source”]=> string(6) “google” [“user_id”]=> string(8) “testuser” }