2011-11-14 54 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"];