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

# parse_str

(PHP 4, PHP 5, PHP 7, PHP 8)

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

### 説明

function parse_str(string `$string`, array `&$result`): void

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() - URL を解釈し、その構成要素を返す
- pathinfo() - ファイルパスに関する情報を返す
- http_build_query() - URL エンコードされたクエリ文字列を生成する
- urldecode() - URL エンコードされた文字列をデコードする

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open