2011-07-26 66 views
0
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參數。PHP取消設置獲取參數?

我所有的$ _GET值都存儲在一個數組中。所以我可以通過使用

$my_array[0] 

使用我建議的邏輯來完成此任務是否昂貴且不現實?

編輯:我只想打印URL以將其用作鏈接。
我的網址有GET參數。

+0

不知道你是在爲你的功能並沒有對GET參數什麼意思。584。 – Treffynnon

+0

我的網址中有多個GET參數。 –

+0

這並沒有讓它更清晰。 – Treffynnon

回答

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')); 
+0

謝謝。這是我的目標。 –

6

不知道你真的想用這個做的,但$_GET(和其他超級全局)不是隻讀:

  • 您可以添加到它們的值,
  • 你可以覆蓋值,
  • 而且,當然,您可以unset()值。

注意,雖然,修改$_GET往往不被視爲良好做法:當一個讀一些代碼,他預計什麼在$_GET來從URL中的參數 - 而不是從你的代碼。


例如,你絕對可以做這樣的事情:

unset($_GET['my_item']); 
0

那豈不是更容易用戶$_SERVER['SCRIPT_URI']
它返回沒有查詢參數的完整URL。

1

這有nthg做$ _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中所述設置「重寫」式功能。