2016-01-29 46 views
0

该选择表单在单击时加载正确的域,页面和语言变量。但是当用户连续两次更改语言时,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> 
+1

添加'navigateTo'函数的代码。 –

+0

*“page.php?lang = en_us?lang = nl_be”* - 第一个“?”将脚本名称与查询字符串分开。第二个“?”没有任何特殊的含义。 '$ _GET ['lang']'的值是''en_us?lang = nl_be''。很可能不是你所期待的。 – axiac

+0

@Sougata你能指出我正确的方向吗?我对编程很陌生。 –

回答

2

$_SERVER['REQUEST_URI']包括查询字符串。改为使用$_SERVER['PHP_SELF']


另一种选择,如果你有$_SERVER['REQUEST_URI']更多的参数,你要在生成的URL保留是编写分析$_GET[]$_SERVER['QUERY_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),您可以使用$_GET生成包含当前查询字符串的所有参数的URL,array()产生没有其他参数或PARAMET的任何其他组合的网址您需要(例如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> 

可以改善功能,让它为你生成也通过添加脚本路径,主机名和协议作为可选参数需要为您的网站网址,使用当前页面的值作为默认值。

+0

我曾尝试过。问题是所有的内容都是从index.php动态生成的,根目录中没有其他页面。基本上$ _SERVER ['PHP_SELF']在所有页面上返回index.php。 $ _SERVER ['REQUEST_URI']在这种情况下工作完美,我只需要解决重写url –

+0

谢谢!我一直在寻找这个小时。我仍然有一个问题,我找不到答案。例如,我在此页面上:domain.com/?page=contact,并且必须更改语言,必须这样做:domain.com/?page=contact&lang=nl_be。 但是目前它通过像这样?lang = nl_be,我该如何做?更改为&在正确的情况下?我试过谷歌,但我不知道如何搜索特定的问题。 –

+0

使用'$ _GET'生成新的URL更容易,因为它包含已经解析为参数的查询字符串。或者你可以手动解析'$ _SERVER ['QUERY_STRING'](它不包含'?')。但是,如果您需要解析完整的URL(或任意字符串),则可以使用PHP [字符串函数](http://php.net/manual/en/ref.strings.php):['strpos() '](http://php.net/manual/en/function.strpos.php)来查找'?',['substr()']的位置(http://php.net/manual/en/ function.substr.php)提取子字符串['str_replace()'](http://php.net/manual/en/function.str-replace.php)aso – axiac