如何确保参数“lang”始终存在于网址中而不将其添加到所有链接?

时间:2016-05-13 14:14:34

标签: php parameters session-variables

我有一个简单的多语言网站。显示页面的语言是通过使用会话变量来控制的,但我希望用户能够复制网址并将其发送给其他人并最终在同一语言页面上 - 这就是我想要的“lang” “url参数始终存在于url中。

我当然可以编辑页面上的所有链接并将其添加到它们中,但是不是更简单的方法吗?有替代解决方案吗?

2 个答案:

答案 0 :(得分:1)

也许你可以试试这个:

<?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");
    }
?>

希望这是你的意思。

答案 1 :(得分:1)

您可以使用以下内容:

<?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");
        }
    }
}
  1. 我们确保$_SESSION['lang'] isset。
  2. 获取当前网址protocoluri
  3. 检查$_GET['lang'] 是否已设置
  4. 检查网址是否已包含参数(strpos($_SERVER[REQUEST_URI], '?')),是这样, 附加&lang=,否则将?lang=附加到其中。