考虑一个URL为foo?q=some&s=3&d=new
的php脚本。我想知道是否有一个实用的方法来解析url创建新的变量链接(在php页面)。例如foo?q=**another-word**&s=3&d=new
或foo?q=another-word&s=**11**&d=new
我正在考虑通过$_SERVER['REQUEST_URI']捕获请求的URL,然后用regex解析;但在实践中,这不是一个好主意。应该有一种方便的方法来解析附加到php脚本中的变量。实际上是GET方法的逆操作
$_GET
变量包含当前查询字符串的已解析数组。数组联合运算符+
可以很容易地将新值合并到其中。http_build_query
将它们重新组合成一个查询字符串:
echo 'foo?' . http_build_query(array('q' => 'another-word') + $_GET);
如果您需要对URL进行更多解析以获得'foo'
,则在REQUEST_URI
上使用parse_url
。
使用http_build_query
怎么样?http://php.net/manual/en/function.http-build-query.php
它将允许您从数组构建查询字符串。
我会使用parse_str
:
$query = 'q=some&s=3&d=new';
parse_str($query, $query_parsed);
$query_parsed['q'] = 'foo-bar';
$new_query = implode('&', array_map(create_function('$k, $v',
'return $k."=".urlencode($v);'),
array_keys($query_parsed), $query_parsed));
echo $new_query;
结果是:
= foo-bar& s = 3, d = new
虽然,这个方法可能看起来像"困难的方式":)