如何确保参数“;郎;始终存在于url中,而不将其添加到所有链接


How to make sure a parameter "lang" always is present in url without adding it to all links?

我有一个简单的多语言网站。显示页面的语言由会话变量控制,但我希望用户能够复制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");
        }
    }
}

  1. 我们确保$_SESSION['lang']已设置
  2. 获取当前url protocoluri
  3. 检查$_GET['lang']是否尚未设置
  4. 检查url是否已经包含参数(strpos($_SERVER[REQUEST_URI], '?')),如果是,追加&lang=,否则追加?lang=