2011-11-14 53 views
2

我使用了「當前URL」功能來獲得當前鏈接時,用戶改變頁面語言與當前URL PHP問題

$uri = explode('&', $_SERVER['REQUEST_URI']); 
$uri = $uri[0]; 

$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$uri : "http://".$_SERVER['SERVER_NAME'].$uri; 

問題是,當我有這樣一個鏈接:

http://127.0.0.1/index.php?id=shop&id2=13&lang=lt 

id2當然會消失。我能做些什麼呢?如果id2設置爲使用爆炸與第二個&或類似的東西是可能的?

+1

您是否嘗試過使用'$ _GET'超級全球?如果是這樣,有沒有理由不想使用它? – jprofitt

+0

@jprofitt我認爲OP正試圖刪除最後一個GET變量。 –

回答

4

可以使用parse_url功能,這裏有一個例子:

$uri = parse_url($_SERVER['REQUEST_URI']); 
$protocol = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://'; 
$url = $protocol . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . '?' . (isset($uri['query']) ? $uri['query'] : ''); 

我沒有在你的代碼中看到你在哪裏得到的腳本的文件名,所以我用$_SERVER['SCRIPT_NAME']

編輯:我的錯誤,我沒有看到你需要操縱/刪除最後$_GET參數。下面是一個關於如何使用類似於上面的方法與parse_str結合使用的示例。請注意,無論lang參數的位置如何,此方法都可以工作,它不必是查詢字符串中的最後一個。

$protocol = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://'; 

$params = array(); 
if(isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) 
{ 
    parse_str($_SERVER['QUERY_STRING'], $params); 
    $params['lang'] = 'anything'; 
    // unset($params['lang']); // This will clear it from the parameters 
} 

// Now rebuild the new URL 
$url = $protocol . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . (!empty($params) ? ('?' . http_build_query($params)) : ''); 

感謝@Yzmir拉米雷斯在消除對parse_url外來呼叫的第二個版本的改進。

+0

我打算在我的回答中使用'parse_str($ _ SERVER ['QUERY_STRING'])',但我更喜歡'parse_url()''''''' +1 –

+0

REQUEST_URI是一個相對url; 'parse_url'將不起作用 – andrewtweber

+0

@andrewtweber - 它適用於我的兩臺服務器? – nickb

0
$uri = explode('&', '/index.php?id=shop&id2=13&lang=lt'); 
$uri = $uri[0]; 
echo $uri; //echos /index.php?id=shop 

你要使用

$_SERVER['QUERY_STRING'] 

得到公正的查詢字符串。如果你想保留所有的變量,那麼只要將$ uri設置爲explode,然後用foreach循環遍歷它們。

$uri = explode('&', $_SERVER['QUERY_STRING']; 
foreach ($uri as $var_val) { 
    $var_val = explode('=', $var_val); 
    $var = $var_val[0]; 
    $val = $var_val[1]; 
} 
0

試試這個:http://codepad.org/cEKYTAp8

$uri = "http://127.0.0.1/index.php?id=shop&id2=13&lang=lt"; 

$uri = substr($uri, 0, strrpos($uri, '&')); 

var_dump($uri); // output: string(41) "http://127.0.0.1/index.php?id=shop&id2=13" 
0

這是我一直使用的代碼,它也支持端口。

$protocol = (!isset($_SERVER["HTTPS"]) || strtolower($_SERVER["HTTPS"]) == "off") ? "http://" : "https://"; 
$port = ((isset($_SERVER["SERVER_PORT"]) && 
    // http:// protocol defaults to port 80 
    (($_SERVER["SERVER_PORT"] != "80" && $protocol == "http://") || 
    // https:// protocol defaults to port 443 
    ($_SERVER["SERVER_PORT"] != "443" && $protocol == "https://")) && 
    // Port is not in http host (port is followed by : at end of address) 
    strpos($_SERVER["HTTP_HOST"], ":") === false) ? ":" . $_SERVER["SERVER_PORT"] : ''); 

return $protocol . $_SERVER["HTTP_HOST"] . $port . $_SERVER["REQUEST_URI"];