簡體   English   中英

如何確保網址中始終存在參數“ lang”而不將其添加到所有鏈接?

[英]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=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM