PHP ページの多言語サポートを構築しています。ページの URL があるとします。
http://mypage.php?user=eric&city=newyork
get パラメータを既に URL に保持しながら、 get パラメータlang=enとlang=esを切り替える一般的な解決策は何ですか?
PHP ページの多言語サポートを構築しています。ページの URL があるとします。
http://mypage.php?user=eric&city=newyork
get パラメータを既に URL に保持しながら、 get パラメータlang=enとlang=esを切り替える一般的な解決策は何ですか?
現在の「GETデータ」で現在のページの相対URLを返す便利なスクリプト。
<?php
function getCurrentURL() {
$currentURL = basename($_SERVER["PHP_SELF"]);
$i = 0;
foreach($_GET as $key => $value) {
$i++;
if($i == 1) { $currentURL .= "?"; }
else { $currentURL .= "&"; }
$currentURL .= $key."=".$value;
}
return $currentURL;
}
?>
それを変更し、それに応じて言語パラメーターを連結します
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
と、スペイン語版が表示されます。
質問を正しく理解している場合は、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
この関数の出力を使用してリンクを作成する前に、必ず呼び出してください。
この種の情報を保存するには、Cookie またはセッション/ID データを使用することをお勧めします。持ち歩く物が少なくなります。