如何在php中向当前url的末尾添加GET变量?
我正在尝试向url添加几个不同的GET变量 我可以轻松地将标题重定向到当前页面url,然后在url中添加$\u GET['test'] 我的问题是,我已经有一些GET变量在url中了。我想做的是:如何在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末尾使用新的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;
}