Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中向当前url的末尾添加GET变量?_Php_Url_Variables_Get - Fatal编程技术网

如何在php中向当前url的末尾添加GET变量?

如何在php中向当前url的末尾添加GET变量?,php,url,variables,get,Php,Url,Variables,Get,我正在尝试向url添加几个不同的GET变量 我可以轻松地将标题重定向到当前页面url,然后在url中添加$\u GET['test'] 我的问题是,我已经有一些GET变量在url中了。我想做的是: 检查url中是否有任何GET变量 如果没有,则在url末尾使用新的GET['test']变量重定向到当前url 如果有,但url中没有GET['test']变量,则将这些其他GET值保留在url中,并将GET['test']变量添加到完整url字符串的末尾 如果存在,并且url中有一个GET['t

我正在尝试向url添加几个不同的GET变量

我可以轻松地将标题重定向到当前页面url,然后在url中添加$\u GET['test']

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

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

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

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

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


如何检查所有这些情况?

最简单的方法是:

$params           = array_merge( $_GET, array( 'test' => 'testvalue' ) );
$new_query_string = http_build_query( $params );
这并不保证
测试将在最后进行。如果出于某种奇怪的原因,您需要这样做,您可以:

$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

礼貌:LOL举例

这将为您提供有关根的URL以及GET参数

如果您希望它与当前目录相关,请添加以下内容

$current_url = explode("/", $_SERVER['REQUEST_URI']);

$current_url = $current_url[end(array_keys($current_url))];

这可能只是Joomla的原因,但我使用以下方法得到了相同的值:

$currenturl=$\u服务器['REQUEST\u URI']


更少的代码

我根据Artefactor的答案创建了这个简单的PHP函数

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

我之所以写这篇文章,是因为与其他解决方案不同,它不公开htaccess重写中隐藏的GET参数。但它不会更新现有的参数

 function addUrlParam($name, $value)
{
  $url = $_SERVER['REQUEST_URI'];
  $val =  $name . '=' . urlencode($value);
  if (strpos($url, '?') !== false) {
    $url .= '&' . $val;
  } else {
    $url .= '?' . $val;
  }
  return $url;
}

下面是最简单的方法

函数buildUrl($name,$value)
{
$\u GET[$name]=$value;
返回$\u服务器['SCRIPT\u NAME'].?'.http\u build\u查询($\u GET);
}

它会将新的查询参数附加到URL或更新其值(如果它已经存在)

您知道,在否决票的同时添加注释被认为是一种良好的做法,否则答案无法改进,否决票也没有任何作用——例外情况是当答案明显具有煽动性时。如果你对你的答案投了反对票,这一点尤其正确;否则,这似乎是自私自利。至于你的答案本身,我认为你把OP的规格看得太字面了,但只有他能说出来。另外,更改
$GET
(或
$\u SERVER
)确实是一个很好的做法。我的意思是,这不是一个好的做法(编辑窗口已经关闭)。np,现在你已经扩展了投票权,以前打算发表评论,但在我被孩子们抢走之前就离开了pc;)我相信这会使GET VAR加倍。如果URL当前是
domain.com/page.php?var=1
“那么您可以转发到”代码的最终输出是
domain.com/page.php?var=1?var=1&test=testvalue
。将请求URI替换为php\u self为什么需要:unset($params[“test”]);它不是被以下语句取代了:$params[“test”]=“testvalue”;检查下面我的答案。它就像一个符咒。不需要双重保险。简单函数;)检查下面我的答案。我根据这个答案创建了一个简单的函数
function addOrUpdateUrlParam($name, $value)
{
    $params = $_GET;
    unset($params[$name]);
    $params[$name] = $value;
    return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params);
}
 function addUrlParam($name, $value)
{
  $url = $_SERVER['REQUEST_URI'];
  $val =  $name . '=' . urlencode($value);
  if (strpos($url, '?') !== false) {
    $url .= '&' . $val;
  } else {
    $url .= '?' . $val;
  }
  return $url;
}