假设这是我当前的网址:
http://example.com/search?param1=foo¶m2=bar
现在我要添加param3=baz
。所以这是代码:
<a href="?param3=baz" >add param3</a>
//=> http://example.com/search?param3=baz
请参阅? param1
和param2
将被删除。所以我必须像这样处理它:
<?php
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
$query_params = $query_params == '' ? '?' : $query_params . '&';
?>
<a href="?{$query_params}param3=baz" >add param3</a>
看起来很难看,但是好的,没关系。现在如果参数已经存在并且我需要编辑它会发生什么?假设这个例子:
http://example.com/search?param1=foo¶m2=bar
现在我如何创建一个编辑parame2
值的链接? (加上保留其他参数)
答案 0 :(得分:0)
在向其添加其他参数的同时,无法编写保留现有查询字符串的相对URI。
你必须再做一次:
search?param1=foo¶m=bar¶m3=baz
或
使用Javascript是可能的
How to add a parameter to the URL?
或强>
function currentUrl() {
$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === FALSE ? 'http' : 'https';
$host = $_SERVER['HTTP_HOST'];
$script = $_SERVER['SCRIPT_NAME'];
$params = $_SERVER['QUERY_STRING'];
return $protocol . '://' . $host . $script . '?' . $params;
}
然后用类似的东西添加你的值
echo currentUrl().'¶m3=baz';
或强>
无论你有什么GET参数,我都会在那里,如果
param3
是一个 它之前的参数将被覆盖,否则将被包括在内 最后。
http_build_query(array_merge($_GET, array("param3"=>"baz")))
答案 1 :(得分:0)
您可以使用函数http_build_query
生成新查询,如下所示:
$url = 'http://example.com/search?param1=foo¶m2=bar';
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $params);
$data = [
'param3' => 'baz'
];
$params = array_merge($params, $data);
echo http_build_query($params) . "\n";
输出将是:
param1=foo¶m2=bar¶m3=baz
如果我们获取url:
,我使用array_merge
来覆盖存在的参数
$url = 'http://example.com/search?param1=foo¶m3=bar';
相同的代码输出将是:
param1=foo¶m3=baz
我们覆盖存在的param并保存旧参数。