2016-01-29 73 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