如果我有url mysite.com/test.php?id=1
。id
是在页面加载时设置的,可以是任何内容。可能还有其他的,比如?id=1&sort=new
。有没有一种方法可以在不知道其他人是什么的情况下添加另一个,然后构建一个新的url?谢谢
作为Kolink答案的替代方案,我想我会使用http_build_query()
。这样,如果查询字符串中没有任何内容,就不会得到额外的&
。尽管如此,这根本不会有什么不同。科林克的回答很好。我发布这篇文章主要是为了向您介绍http_build_query()
,因为您稍后可能需要它:
http_build_query(array_merge($_GET, array('newvar'=>'123')))
基本上,我们使用http_build_query()
获取$_GET
中的所有内容,并将其与我们想要的任何其他参数的数组合并。在本例中,我只是使用示例参数动态创建一个数组。在实践中,您可能已经在某个地方拥有了这样的数组。
"?".$_SERVER['QUERY_STRING']."&newvar=123";
类似的东西。
使用此函数:https://github.com/patrykparcheta/misc/blob/master/addQueryArgs.php
function addQueryArgs(array $args, string $url)
{
if (filter_var($url, FILTER_VALIDATE_URL)) {
$urlParts = parse_url($url);
if (isset($urlParts['query'])) {
parse_str($urlParts['query'], $urlQueryArgs);
$urlParts['query'] = http_build_query(array_merge($urlQueryArgs, $args));
$newUrl = $urlParts['scheme'] . '://' . $urlParts['host'] . $urlParts['path'] . '?' . $urlParts['query'];
} else {
$newUrl = $url . '?' . http_build_query($args);
}
return $newUrl;
} else {
return $url;
}
}
$newUrl = addQueryArgs(array('add' => 'this', 'and' => 'this'), 'http://example.com/?have=others');