如何向当前 URL 添加 URL 参数?

55

目前我在

http://example.com/topic.php?id=14 

我希望能创建一个链接到

http://example.com/topic.php?id=14&like=like 

可以通过不定义当前 URL 的方式来解决这个问题,例如使用 <a href="&like=like">Like</a>。但是这种方式会显示 http://example.com/&like=like


1
可能是重复的问题,参考 https://dev59.com/KXRB5IYBdhLWcg3w3K4J 或者 https://dev59.com/Lmw05IYBdhLWcg3w_W1N。 - reflexiv
7个回答

24

无法编写相对URI,既保留现有查询字符串,又向其中添加其他参数。

你需要:

topic.php?id=14&like=like

4
有很多方法。请参考 https://dev59.com/Lmw05IYBdhLWcg3w_W1N 了解如何使用 JavaScript 添加参数到 URL。 - reflexiv
7
无需重复路径,以问号开头即可,例如:https://dev59.com/82sz5IYBdhLWcg3weHuU - webjunkie
1
使用 <a href="<?php echo $_SERVER['REQUEST_URI'] . '&filter=2'; ?>"> 怎么样? - rambodrahmani
@rambodrahmani - 这不是一个 PHP 的问题,而且容易受到 XSS 攻击。 - Quentin

17
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().'&value=myVal';

16

虽然有些晚了,但你可以使用http构建查询,如下所示:?id=14&like=like

http_build_query(array_merge($_GET, array("like"=>"like")))

无论您有什么GET参数,它们仍将存在,如果like之前是参数,则将被覆盖,否则将包含在末尾。


1
这只是 PHP。 - Overflow
你说得对,我简直无法相信我没有意识到这个问题不是一个 PHP 的问题。我只是以为它是因为另一个答案也是用 PHP 给出的 :/ - Zachary Weixelbaum

9

如果您想在JavaScript中添加URL参数,请参考此答案。如上所述,您可以在现代浏览器中使用URLSeachParams API来实现:

<script>
function addUrlParameter(name, value) {
  var searchParams = new URLSearchParams(window.location.search)
  searchParams.set(name, value)
  window.location.search = searchParams.toString()
}
</script>

<body>
...
  <a onclick="addUrlParameter('like', 'like')">Like this page</a>
...
</body>

5
这不是一个优雅的方式,但是可以将其作为单行代码来实现<a>元素。

<a href onclick="event.preventDefault(); location+='&like=like'">Like</a>


3
如果您希望使用“like”作为参数,您的链接需要是这样的:
<a href="/topic.php?like=like">Like</a>

更有可能的情况是,您想要:
<a href="/topic.php?id=14&like=like">Like</a>

1
也许您可以编写以下函数:

var addParams = function(key, val, url) {
  var arr = url.split('?');
  if(arr.length == 1) {
    return url + '?' + key + '=' + val;
  }
  else if(arr.length == 2) {
    var params = arr[1].split('&');
    var p = {};
    var a = [];
    var strarr = [];
    $.each(params, function(index, element) {
      a = element.split('=');
      p[a[0]] = a[1];
      })
    p[key] = val;
    for(var o in p) {
      strarr.push(o + '=' + p[o]);
    }
    var str = strarr.join('&');
    return(arr[0] + '?' + str);
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接