我有一个简单的多语言网站。显示页面的语言由会话变量控制,但我希望用户能够复制url并将其发送给其他人,最终出现在同一语言页面上——也就是说,我希望"lang"url参数始终存在于url中。
我当然可以编辑页面上的所有链接并将其添加到其中,但没有更简单的方法吗?有其他解决方案吗
也许你可以试试这个:
<?php
//get full url
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//check if get lang exists.
if(isset($_GET['lang'])){
if($_GET['lang'] == "en"){
//then do nothing.
} else{
//get all parameters.
$query_arr = $_GET;
//chang lang parameter.
$query_arr["lang"] = "en";
$query = http_build_query($query_arr);
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
//make first part of url.
$first_url = 'http://' . $_SERVER['HTTP_HOST'] . $uri_parts[0];
//redirect to correct url.
header("location: " . $first_url . "?" . $query);
}
}else{
//redirect to correct url.
header("location: " . $url . "&lang=en");
}
?>
希望这就是你的意思。
您可以使用以下内容
<?php
session_start();
if(isset($_SESSION['lang'])){
$sessionLang = $_SESSION['lang'];
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$rUri = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if(!(isset($_GET['lang']))){
if (strpos($rUri, '?')) { // returns false if '?' isn't there
$newUrl = "$rUri&$sessionLang";
header("Location: $newUrl");
} else {
$newUrl = "$rUri?$sessionLang";
header("Location: $newUrl");
}
}
}
- 我们确保
$_SESSION['lang']
已设置 - 获取当前url
protocol
和uri
- 检查
$_GET['lang']
是否尚未设置 - 检查url是否已经包含参数(
strpos($_SERVER[REQUEST_URI], '?')
),如果是,追加&lang=
,否则追加?lang=