如何在php中将GET变量添加到当前URL的末尾?

2022-08-30 14:49:15

我正在尝试向URL添加一些不同的GET变量。

我可以很容易地将标题重定向到当前页面URL,然后在url中添加$ _GET['test']。

我的问题是我有一些GET变量已经在URL中。我想做的是:

  • 检查网址中是否有任何 GET 变量

    • 如果没有,则重定向到当前网址,并在网址末尾使用新的GET['test']变量。

    • 如果有,但 URL 中没有 GET['test'] 变量,则将其他 GET 值保留在 url 中,并将 GET['test'] 变量添加到完整 url 字符串的末尾

    • 如果有,并且 URL 中有一个 GET['test'] 变量,则将其他 GET 值保留在 url 中,并将 GET['test'] 变量值与新值交换。

我该如何检查所有这些条件?


答案 1

简单的方法是:

$params           = array_merge( $_GET, array( 'test' => 'testvalue' ) );
$new_query_string = http_build_query( $params );

这并不能保证会在最后。如果出于某种奇怪的原因,你需要这样做,你可以这样做:test

$params = $_GET;
unset( $params['test'] );
$params['test']   = 'testvalue';
$new_query_string = http_build_query( $params );

但请注意,PHP 查询字符串参数分析可能与其他应用程序存在一些互操作性问题。特别是,PHP 不接受任何参数的多个值,除非它具有类似数组的名称。

然后你可以转发到

( empty( $_SERVER['HTTPS'] ) ? 'http://' : 'https://' ) .
( empty( $_SERVER['HTTP_HOST'] ) ? $defaultHost : $_SERVER['HTTP_HOST'] ) .
$_SERVER['REQUEST_URI'] . '?' . $new_query_string

答案 2

我基于Artefacto的答案创建了这个简单的PHP函数。

function addOrUpdateUrlParam($name, $value)
{
    $params = $_GET;
    unset($params[$name]);
    $params[$name] = $value;
    return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params);
}
  • 如果要更改现有参数,它将更新该值。
  • 如果它是新值,则相加

推荐