0

PHP ページの多言語サポートを構築しています。ページの URL があるとします。

http://mypage.php?user=eric&city=newyork

get パラメータを既に URL に保持しながら、 get パラメータlang=enlang=esを切り替える一般的な解決策は何ですか?

4

4 に答える 4

3

現在の「GETデータ」で現在のページの相対URLを返す便利なスクリプト。

<?php 
function getCurrentURL() { 
    $currentURL = basename($_SERVER["PHP_SELF"]); 
    $i = 0; 
    foreach($_GET as $key => $value) { 
        $i++; 
        if($i == 1) { $currentURL .= "?"; } 
        else { $currentURL .= "&amp;"; } 
        $currentURL .= $key."=".$value; 
    } 
    return $currentURL; 
} 
?> 

それを変更し、それに応じて言語パラメーターを連結します

于 2011-03-29T09:45:02.983 に答える
2

GET パラメータを常に URL に保持するわけではなく、言語を設定する場合にのみ、セッションを使用して現在のクライアントが使用している言語を記憶します。

PHPで次の関数を作成します

function getCurrentLanguage()
{
    if(isset($_REQUEST['lang']))
    {
         //Validate that $_REQUEST['lang'] is valid
         return $_SESSION['lang'] = $_REQUEST['lang'];
    }

    if(isset($_SESSION['lang']))
    {
        return $_SESSION['lang'];
    }

    return 'en'; //Default
}

ユーザーがサイトにアクセスすると、デフォルトの言語は英語になりますが、ユーザーがサイトに移動するとindex.php?lang=es言語が es に設定されるため、ユーザーが を使用せずにサイト内を移動する?lang=esと、スペイン語版が表示されます。

于 2011-03-29T09:48:52.270 に答える
0

質問を正しく理解している場合は、URLにパラメーターを追加するか、その値が既に存在する場合はその値を新しい値に置き換える方法が必要です。

これは、あらゆる種類のURLで安全に実行できる関数です。

function url_with_parameter($url, $name, $value) {
    if(strpos($url, '?') === false) {
        if (strpos($url, '#') === false) {
            // No query and no fragment -- append a new query to the url
            $newurl = $url.'?'.$name.'='.$value;
        }
        else {
            // No query with fragment -- insert query before existing fragment
            $newurl = str_replace('#', '?'.$name.'='.$value.'#', $url);
        }
    }
    else {
        if (strpos($url, $name.'=') === false) {
            // With query, param does not exist -- insert at beginning of query
            $newurl = str_replace('?', '?'.$name.'='.$value.'&', $url);
        }
        else {
            // With query, param exists -- replace it
            $parsed = parse_url($url, PHP_URL_QUERY);
            parse_str($parsed, $vars);
            $newurl = str_replace($name.'='.$vars[$name], $name.'='.$value, $url);
        }
    }

    return $newurl;
}

urlencodeこの関数の出力を使用してリンクを作成する前に、必ず呼び出してください。

于 2011-03-29T10:08:19.953 に答える
0

この種の情報を保存するには、Cookie またはセッション/ID データを使用することをお勧めします。持ち歩く物が少なくなります。

于 2011-03-29T09:56:00.550 に答える