Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何确保一个参数";“朗”;是否始终存在于url中而不将其添加到所有链接?_Php_Parameters_Session Variables - Fatal编程技术网

Php 如何确保一个参数";“朗”;是否始终存在于url中而不将其添加到所有链接?

Php 如何确保一个参数";“朗”;是否始终存在于url中而不将其添加到所有链接?,php,parameters,session-variables,Php,Parameters,Session Variables,我有一个简单的多语言网站。所显示页面的语言由会话变量的使用控制,但我希望用户能够复制url并将其发送给其他人,最终到达同一语言页面——也就是说,我希望url中始终存在“lang”url参数 我当然可以编辑页面上的所有链接并将其添加到其中,但是没有更简单的方法吗?是否有其他解决方案?也许您可以尝试以下方法: <?php //get full url $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; /

我有一个简单的多语言网站。所显示页面的语言由会话变量的使用控制,但我希望用户能够复制url并将其发送给其他人,最终到达同一语言页面——也就是说,我希望url中始终存在“lang”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
    //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");
        }
    }
}

您可以使用以下内容:

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

一种方法是使用HTML5历史API在加载页面时自动在URL中添加参数。但这也有缺点,如果用户直接右键单击链接并复制它,那么参数就不存在了。另一个不受此影响的解决方案是使用不同的子域而不是参数-假设您的链接中不包含域名,这也会使其正常工作。亲爱的@CherryDT,HTML5历史API将有助于实现这一目的。如果你有时间,最好写一个答案。你的问题标题与内容不匹配。让我看看我是否明白了。。。用户语言设置为ex:
$\u SESSION['lang']
,您希望将该值添加到所有URL,例如:
www.somesite.com/script.php?lang=pt
lang
不需要是
en
,它可以是
pt
,对吗?@pedrobito Yes:)这是正确的。我更改了标题,这样就不会混淆。好的,明白了,请检查我的答案。一种方法是使用HTML5历史API在加载页面时自动在URL中添加参数。但这也有缺点,如果用户直接右键单击链接并复制它,那么参数就不存在了。另一个不受此影响的解决方案是使用不同的子域而不是参数-假设您的链接中不包含域名,这也会使其正常工作。亲爱的@CherryDT,HTML5历史API将有助于实现这一目的。如果你有时间,最好写一个答案。你的问题标题与内容不匹配。让我看看我是否明白了。。。用户语言设置为ex:
$\u SESSION['lang']
,您希望将该值添加到所有URL,例如:
www.somesite.com/script.php?lang=pt
lang
不需要是
en
,它可以是
pt
,对吗?@pedrobito Yes:)这是正确的。我更改了标题,这样就不会混淆。好的,明白了,请检查我的答案。谢谢,你能用一些注释解释一下这是如何工作的吗?添加了一些注释。谢谢,你能用一些注释解释一下这是如何工作的吗?添加了一些注释。