如何更改foo链接中的变量?q=some&s=3&d=new


How to change variables in link of foo?q=some&s=3&d=new

考虑一个URL为foo?q=some&s=3&d=new的php脚本。我想知道是否有一个实用的方法来解析url创建新的变量链接(在php页面)。例如foo?q=**another-word**&s=3&d=newfoo?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

虽然,这个方法可能看起来像"困难的方式":)