parse_str

URL のクエリストリングとして文字列をパースする

説明

void parse_str(string $string, array &$result)

URL 経由で渡されたクエリストリングと同様に string をパースし、渡された配列 result のキーに設定します。 result が渡されない場合、 現在のスコープの変数として、値が設定されます。

パラメータ

string

入力文字列。

result

リファレンスで渡される変数。 string から展開された、 キーと値のペアを含む配列に設定されます。 result が渡されない場合、 それぞれのキーが別々の変数として、ローカルスコープに設定されます。

警告

この関数を result パラメータを指定せずに使うことは 絶対に おすすめしません し、 PHP 7.2 以降では 推奨されません。 PHP 8.0.0 以降では、result パラメータの指定が 必須 になっています。

戻り値

値を返しません。

変更履歴

バージョン 説明
8.0.0 result は、オプションではなくなりました。
7.2.0 parse_str関数を 第二引数を指定せずに使うと E_DEPRECATED レベルの警告が発生するようになりました。

例1 parse_str の使用法

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";

// お勧め
parse_str($str, $output);
echo $output['first'], PHP_EOL;  // value
echo $output['arr'][0], PHP_EOL; // foo bar
echo $output['arr'][1], PHP_EOL; // baz
?>

パラメータ名に含まれるスペースやドットは、 配列のキーやローカル変数を作成する際にアンダースコアに置換されます。 こうなっている理由は、 PHP の変数名がスペースやドットを許容していないからですが、 この関数に、お勧めのパラメータ result を指定しても同じ処理が適用されます。

例2 parse_str の、名前のマングリング処理

<?php
parse_str("My Value=Something", $output);
echo $output['My_Value']; // Something
?>

注意

注意:

parse_str は、 max_input_vars の影響を受けます。 この値の制限を超えると E_WARNING が発生し、その制限を越えた変数は結果の配列に設定されません。 この値のデフォルトは 1000 です。 max_input_vars を必要に応じて調整してください。

注意:

配列 result (または第二引数が設定されない場合に作成される変数) に設定される全ての値は、urldecode と同じルールで URLデコード されています。

注意:

現在のリクエストのクエリストリングを取得するには、変数 $_SERVER['QUERY_STRING'] を使用する事ができます。また、 外部から来る変数 のセクションも読んでください。

参考

  • parse_url
  • pathinfo
  • http_build_query
  • urldecode