如何将GET变量添加到php中当前url的结尾?

时间:2010-07-02 01:24:28

标签: php url variables get

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

我可以轻松地将标题重定向到当前页面网址,然后只需在网址中添加$ _GET ['test']。

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

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

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

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

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

如何检查所有这些条件?

7 个答案:

答案 0 :(得分:38)

简单的方法是:

$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

答案 1 :(得分:7)

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

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

答案 2 :(得分:1)

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();

礼貌:http://php.net/manual/en/reserved.variables.server.php LOL的例子

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

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

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

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

答案 3 :(得分:1)

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

$ currenturl = $ _SERVER ['REQUEST_URI'];

代码少得多。

答案 4 :(得分:0)

...

$newval = 'whatever';
if( !count($_GET) ) {
 header('Location: ?test=' . $newval);
 exit;
}
if(!isset($_GET['test'])) {
 $_SERVER['REQUEST_URI'] .= '&test='.$newval;
}
$_GET['test'] = $newval;

答案 5 :(得分:0)

我之所以这样写是因为,与其他解决方案不同,它不会公开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;
}

答案 6 :(得分:0)

这是最简单的方法

function buildUrl($name, $value)
 {
    $_GET[$name] = $value;
    return $_SERVER['SCRIPT_NAME'] . '?' . http_build_query($_GET);
 }

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