Php 如果$\u GET==$lang多语言页面更改

Php 如果$\u GET==$lang多语言页面更改,php,html,Php,Html,此选择表单在单击时加载正确的域、页面和语言变量。但是,当用户连续两次更改语言时,url有两个语言变量。例子: domain.com/page.php?lang=en_us?lang=nl_be 我如何防止这种情况 <div class="country_selector"><?php echo $lang['REGION']; ?> <select id="source" onchange="navigateTo(this, 'window', fa

此选择表单在单击时加载正确的域、页面和语言变量。但是,当用户连续两次更改语言时,url有两个语言变量。例子: domain.com/page.php?lang=en_us?lang=nl_be

我如何防止这种情况

<div class="country_selector"><?php echo $lang['REGION']; ?>
        <select id="source" onchange="navigateTo(this, 'window', false);">
            <option value="https://domain.cc<?php echo $_SERVER['REQUEST_URI']; ?>?lang=en_eu">Europa</option>
            <option value="https://domain.be<?php echo $_SERVER['REQUEST_URI']; ?>?lang=nl_be">België</option>
            <option  value="https://domain.nl<?php echo $_SERVER['REQUEST_URI']; ?>?lang=nl_nl">Nederland</option>
            <option  value="https://domain.uk<?php echo $_SERVER['REQUEST_URI']; ?>?lang=en_uk">United Kingdom</option>
            <option  value="https://domain.cc<?php echo $_SERVER['REQUEST_URI']; ?>?lang=en_us">United States</option>
        </select>
    </div>
$\u服务器['REQUEST\u URI']包含查询字符串。改用$\u服务器['PHP\u SELF']

另一个选项是,如果在$\u SERVER['REQUEST\u URI']中有更多要保留在生成的URL中的参数,则编写一个函数来分析$\u GET[]或$\u SERVER['QUERY\u STRING'],添加或替换lang参数并生成URL:

function generateLanguageURL(array $params, $lang)
{
    // Add the language to $params (or replace it if it's already there)
    $params['lang'] = $lang;

    // Generate the query string, append it to the script's URI and return
    // Generate partial URLs. There is no need to put the protocol
    // and the host name in the URL if they are the same as of the current page.
    return $_SERVER['PHP_SELF'].'?'.http_build_query($params);
}
第一个参数array$params允许您使用$\u GET生成包含当前查询字符串的所有参数的URL,使用array生成不带其他参数的URL,或生成您需要的任何其他参数组合,例如array'q'=>foo',items'=>10',page'=>2

如何使用它:

<div class="country_selector"><?php echo $lang['REGION']; ?>
    <select id="source" onchange="navigateTo(this, 'window', false);">
        <option value="<?php echo generateLanguageUrl($_GET, 'en_eu'); ?>">Europa</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'nl_be'); ?>">België</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'nl_nl'); ?>">Nederland</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'en_uk'); ?>">United Kingdom</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'en_us'); ?>">United States</option>
    </select>
</div>
您可以通过添加脚本路径、主机名和协议作为可选参数,使用当前页面的值作为默认值,改进该函数,使其生成站点所需的任何URL。

$\u服务器['REQUEST\u URI']包括查询字符串。改用$\u服务器['PHP\u SELF']

另一个选项是,如果在$\u SERVER['REQUEST\u URI']中有更多要保留在生成的URL中的参数,则编写一个函数来分析$\u GET[]或$\u SERVER['QUERY\u STRING'],添加或替换lang参数并生成URL:

function generateLanguageURL(array $params, $lang)
{
    // Add the language to $params (or replace it if it's already there)
    $params['lang'] = $lang;

    // Generate the query string, append it to the script's URI and return
    // Generate partial URLs. There is no need to put the protocol
    // and the host name in the URL if they are the same as of the current page.
    return $_SERVER['PHP_SELF'].'?'.http_build_query($params);
}
第一个参数array$params允许您使用$\u GET生成包含当前查询字符串的所有参数的URL,使用array生成不带其他参数的URL,或生成您需要的任何其他参数组合,例如array'q'=>foo',items'=>10',page'=>2

如何使用它:

<div class="country_selector"><?php echo $lang['REGION']; ?>
    <select id="source" onchange="navigateTo(this, 'window', false);">
        <option value="<?php echo generateLanguageUrl($_GET, 'en_eu'); ?>">Europa</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'nl_be'); ?>">België</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'nl_nl'); ?>">Nederland</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'en_uk'); ?>">United Kingdom</option>
        <option value="<?php echo generateLanguageUrl($_GET, 'en_us'); ?>">United States</option>
    </select>
</div>

您可以通过添加脚本路径、主机名和协议作为可选参数,使用当前页面的值作为默认值,改进该函数,使其生成站点所需的任何URL。

添加navigateTo function.page.php?lang=en_us?lang=nl_be-第一个?将脚本名称与查询字符串分开。第二个?没有任何特殊意义。$_GET['lang']的值是'en_us?lang=nl_be'。很可能不是你所期望的。@Sougata你能为我指出正确的方向吗?我对编程相当陌生。添加navigateTo function.page.php?lang=en_us?lang=nl_be的代码-第一个?将脚本名称与查询字符串分开。第二个?没有任何特殊意义。$_GET['lang']的值是'en_us?lang=nl_be'。很可能不是你所期望的。@Sougata你能为我指出正确的方向吗?我对编程很陌生。我以前试过。问题是所有内容都是从index.php动态生成的,根目录中没有其他页面。基本上$\u服务器['PHP\u SELF']会在所有页面上返回index.PHP$_服务器['REQUEST_URI']在这种情况下工作得非常完美,我只需要重新编写URL就可以了谢谢!我已经找了好几个小时了。我还有一个问题找不到答案。例如,当我在此页面上时:domain.com/?page=contact并且必须更改语言时,必须这样做:domain.com/?page=contact&lang=nl\be。但目前它是这样通过的?lang=nl_be,我如何才能使?在正确的情况下更改为(&N)?我试过谷歌,但我不知道如何搜索这个特定的问题。使用$\u GET生成新的URL更容易,因为它包含已经解析为参数的查询字符串。或者,您可以手动分析$\u服务器['QUERY\u STRING'],它不包含?。但是,如果需要解析完整的URL或任意字符串,可以使用PHP:查找?的位置,提取子字符串,a.s.o.I以前尝试过。问题是所有内容都是从index.php动态生成的,根目录中没有其他页面。基本上$\u服务器['PHP\u SELF']会在所有页面上返回index.PHP$_服务器['REQUEST_URI']在这种情况下工作得非常完美,我只需要重新编写URL就可以了谢谢!我已经找了好几个小时了。我还有一个问题找不到答案。例如,当我在此页面上时:domain.com/?page=contact并且必须更改语言时,必须这样做:domain.com/?page=contact&lang=nl\be。但目前它是这样通过的?lang=nl_be,我如何才能使?在正确的情况下更改为(&N)?我试过谷歌,但我不知道如何搜索这个特定的问题。使用$\u GET生成新的URL更容易,因为它包含已经解析为参数的查询字符串。或者,您可以手动分析$\u服务器['QUERY\u STRING'],它不包含?。但是,如果需要解析完整的URL或任意字符串,可以使用PHP:查找?的位置,提取子字符串a.s.o。