【发布时间】:2013-03-30 06:14:02
【问题描述】:
我有一个这样的字符串存储在 mysql 表中:
?name1=value1&name2=value2&name3=value3
最初这些数据仅用于将 GET 数据发送到另一个脚本,但现在我发现自己需要它来做其他事情。
PHP 中是否有预定义的函数可以将这些对转换为变量或数组?还是我必须手动完成?
【问题讨论】:
标签: php arrays query-string name-value
我有一个这样的字符串存储在 mysql 表中:
?name1=value1&name2=value2&name3=value3
最初这些数据仅用于将 GET 数据发送到另一个脚本,但现在我发现自己需要它来做其他事情。
PHP 中是否有预定义的函数可以将这些对转换为变量或数组?还是我必须手动完成?
【问题讨论】:
标签: php arrays query-string name-value
(名称不佳的)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 是如何配置的,它都具有一致的行为的好处。当然,您还需要首先从头开始去掉?,这两个示例中都没有。
【讨论】:
Var_export 可能有用。
$arr=?name1=value1&name2=value2&name3=value3
var_export($arr);
【讨论】: