PHP unset get参数?

时间:2011-07-26 11:07:22

标签: php url get

 function getUrlCurrently() {
    $pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";

if ($_SERVER["SERVER_PORT"] != "80")  {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}  else  {
   $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}

我正在使用此功能来确定页面的当前URL。我想知道是否可以扩展此函数以取消设置预定的$ _GET参数。

我的所有$ _GET值都存储在一个数组中。所以我可以使用

访问特定值
$my_array[0]

使用我建议的逻辑来完成这项任务是否昂贵且不现实?

编辑:我只想打印URL以将其用作链接。
我的网址中有GET参数。

6 个答案:

答案 0 :(得分:7)

不确定您真正想要做什么,但$_GET (以及其他超级全局)不是只读的:

  • 您可以在其中添加值
  • 你可以覆盖价值观,
  • 当然,您可以unset()值。

请注意,修改$_GET通常不被视为良好做法:当人们阅读某些代码时,他希望$_GET中的内容来自URL中的参数 - 而不是来自你的代码。


例如,你绝对可以这样做:

unset($_GET['my_item']);

答案 1 :(得分:2)

更新您的功能:

function getUrlCurrently($filter = array()) {
    $pageURL = isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" ? "https://" : "http://";

    $pageURL .= $_SERVER["SERVER_NAME"];

    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= ":".$_SERVER["SERVER_PORT"];
    }

    $pageURL .= $_SERVER["REQUEST_URI"];


    if (strlen($_SERVER["QUERY_STRING"]) > 0) {
        $pageURL = rtrim(substr($pageURL, 0, -strlen($_SERVER["QUERY_STRING"])), '?');
    }

    $query = $_GET;
    foreach ($filter as $key) {
        unset($query[$key]);
    }

    if (sizeof($query) > 0) {
        $pageURL .= '?' . http_build_query($query);
    }

    return $pageURL;
}

// gives the url as it is
echo getUrlCurrently();

// will remove 'foo' and 'bar' from the query if existent
echo getUrlCurrently(array('foo', 'bar'));

答案 2 :(得分:1)

要在数组中组装带有GET参数的链接,请尝试:

unset($my_array['key']);
$url = getUrlCurrently() . '?' . http_build_query($my_array);

请参阅http://www.php.net/manual/en/function.http-build-query.php

答案 3 :(得分:1)

这与$ _GET有关。您可以使用现有的全局数据$ _SERVER或getenv,如下所示:

function GetCurrentUrl($debug=FALSE) {

    $pageURL = (strtolower($_SERVER["HTTPS"]) == "on") ? "https://" : "http://";

    if ($_SERVER["SERVER_PORT"] != "80")    {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    }
    else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }

    // DEBUG
    if ($debug) {
        $msg = "DEBUG MODE: current URL= ".$pageURL ;
        if (function_exists('debug_msg')) {
            debug_msg($msg , $debug) ;
        }else {
            echo $msg ;
        }

    }

    return $pageURL;
}

编辑:但我看到你的$ _GET语句来自哪里。你的意思是URI内容一些参数。您可以通过$ _SERVER ['REQUEST_URI']获取它们,或者使用http_build_query

作为更好的建议

EDIT2: 最重要的是,关于问题的一个方面,您还可以添加一个解决方法来设置类似“重写”的函数,如this php manual interesting example中所述。

答案 4 :(得分:0)

用户$_SERVER['SCRIPT_URI']会不会更容易? 它返回没有查询参数的完整URL。

答案 5 :(得分:0)

//your query string is ?a=1&b=2&c=3
function unset_get($param){
    //sets string to (array) $query_string 
    parse_str($_SERVER['QUERY_STRING'],$query_string);

    //removes array element defined by param 
    unset($query_string[$param]);

    //returns modified array as a string 
    return http_build_query($query_string);
}
print unset_get( 'b');
//returns "a=1&c=3"