我正在尝试向URL添加一些不同的GET变量。
我可以轻松地将标题重定向到当前页面网址,然后只需在网址中添加$ _GET ['test']。
我的问题是我已经在url中有一些GET变量。我想做的是:
我怎样才能检查所有这些条件?
简单的方法是:
$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
我基于Artefacto的答案创建了这个简单的PHP函数。
function addOrUpdateUrlParam($name, $value)
{
$params = $_GET;
unset($params[$name]);
$params[$name] = $value;
return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params);
}
function request_URI() {
if(!isset($_SERVER['REQUEST_URI'])) {
$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
if($_SERVER['QUERY_STRING']) {
$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
}
return $_SERVER['REQUEST_URI'];
}
$_SERVER['REQUEST_URI'] = request_URI();
礼貌:qolxswpoi以LOL为例
这将为您提供与根相关的URL以及GET参数。
如果您希望它与当前目录相关,请添加以下内容。
http://php.net/manual/en/reserved.variables.server.php
它可能只是Joomla的原因,但我通过使用获得相同的值:
$ currenturl = $ _SERVER ['REQUEST_URI'];
代码少得多。
..
$current_url = explode("/", $_SERVER['REQUEST_URI']);
$current_url = $current_url[end(array_keys($current_url))];
我写这个是因为与其他解决方案不同,它不会从htaccess重写中公开隐藏的GET参数。它不会更新现有的参数。
$newval = 'whatever';
if( !count($_GET) ) {
header('Location: ?test=' . $newval);
exit;
}
if(!isset($_GET['test'])) {
$_SERVER['REQUEST_URI'] .= '&test='.$newval;
}
$_GET['test'] = $newval;