【问题标题】:How can I convert a query string to variables in PHP?如何将查询字符串转换为 PHP 中的变量?
【发布时间】:2013-03-30 06:14:02
【问题描述】:

我有一个这样的字符串存储在 mysql 表中:

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

最初这些数据仅用于将 GET 数据发送到另一个脚本,但现在我发现自己需要它来做其他事情。

PHP 中是否有预定义的函数可以将这些对转换为变量或数组?还是我必须手动完成?

【问题讨论】:

    标签: php arrays query-string name-value


    【解决方案1】:

    (名称不佳的)PHP 函数 parse_str 可以做到这一点,但您需要先去掉最初的问号。

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

    手册页中提到了此功能的一些注意事项:

    • 如果在没有第二个数组参数的情况下调用它,它会将值作为局部变量写入当前范围。如果字符串包含可能会更改程序中已经存在的变量值的键,这可能会很危险。
    • magic_quotes_gpc 设置会影响此函数的运行方式,因为这是 PHP 内部用于解码查询字符串和 urlencoded POST 正文的例程。

    如果您需要不受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 是如何配置的,它都具有一致的行为的好处。当然,您还需要首先从头开始去掉?,这两个示例中都没有。

    【讨论】:

      【解决方案2】:

      Var_export 可能有用。

      $arr=?name1=value1&name2=value2&name3=value3
      var_export($arr);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-27
        • 2018-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        • 1970-01-01
        相关资源
        最近更新 更多