# parse_str

(PHP 4, PHP 5, PHP 7)

parse_str — 将字符串解析成多个变量

### 说明

parse_str ( string `$encoded_string` [, array `&$result` ] ) : void

如果 `encoded_string` 是 URL 传递入的查询字符串（query string），则将它解析为变量并设置到当前作用域（如果提供了 `result` 则会设置到该数组里 ）。

### 参数

`encoded_string`

  输入的字符串。

`result`

  如果设置了第二个变量 `result`， 变量将会以数组元素的形式存入到这个数组，作为替代。

  Warning

  极度不建议 在没有 `result` 参数的情况下使用此函数，并且在 PHP 7.2 中将废弃不设置参数的行为。

  在函数中动态设置变量会和 register_globals 有同样的问题。

  阅读「安全」中 使用 Register Globals 的章节，解释了它为什么是危险的。

### 返回值

没有返回值。

### 更新日志

版本 | 说明
--- | ---
7.2.0 | 不带第二个参数的情况下使用 parse_str() 会产生 `E_DEPRECATED` 警告。

### 范例

Example #1 parse_str() 的使用

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

    // 推荐用法
    parse_str($str, $output);
    echo $output['first'];  // value
    echo $output['arr'][0]; // foo bar
    echo $output['arr'][1]; // baz

    // 不建议这么用
    parse_str($str);
    echo $first;  // value
    echo $arr[0]; // foo bar
    echo $arr[1]; // baz
    ?>

由于 PHP 的变量名不能带「点」和「空格」，所以它们会被转化成下划线。 用本函数带 `result` 参数，也会应用同样规则到数组的键名。

Example #2 parse_str() 名称改写

    <?php
    parse_str("My Value=Something");
    echo $My_Value; // Something

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

### 注释

> Note:

> 所有创建的变量(或者在设置第二个参数的情况下，返回数组里的值)， 都已经 urldecode() 了。

> Note:

> 要获取当前的 QUERY_STRING，可以使用 $_SERVER['QUERY_STRING'] 变量。 所以你可能想要阅读 来自 PHP 之外的变量这个章节。

> Note:

> 本函数受 magic_quotes_gpc 设置的影响， 和 $_GET、 $_POST 在 PHP 中填充变量相似， parse_str() 也使用了同样的机制。

### 参见

- parse_url() - 解析 URL，返回其组成部分
- pathinfo() - 返回文件路径的信息
- http_build_query() - 生成 URL-encode 之后的请求字符串
- urldecode() - 解码已编码的 URL 字符串