0 レビュー
3 回答
php-言語リダイレクトが機能しない
言語検出に基づいてユーザーを他のページにリダイレクトするコードに苦労しています。私はこのウェブサイトの他の投稿から運がなかったので、これまでのところ有望に見えるこのコードを見つけました。私の唯一の質問は、コードの最初の行に関連しています。最初の行の「」の部分には何を入れますか?
<?php
$lc = ""; // Initialize the language code variable
// Check to see that the global language server variable isset()
// If it is set, we cut the first two characters from that string
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
$lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
// Now we simply evaluate that variable to detect specific languages
if($lc == "fr"){
header("location: index_french.php");
exit();
} else if($lc == "de"){
header("location: index_german.php");
exit();
}
?>
<h2>Hello Default Language User</h2>
<h3><?php echo "Your 2-letter Code is: ".$lc; ?></h3>
このコードを実行すると、エラーメッセージが表示されます:
警告:ヘッダー情報を変更できません-12行目の/home/m3418630/public_html/sumoresources/index.phpで(出力は/home/m3418630/public_html/sumoresources/index.php:3で開始されました)によって既に送信されたヘッダー< / p>
これが発生する理由を誰かが説明できますか?
ありがとう
わからない
0
レビュー
答え :
解決策:
コードスニペットでは、デフォルトの言語を変数 $lc
に設定する必要があります。サーバーが現在のリクエストから言語コードを送信すると、上書きされます。
わからない
0
レビュー
答え :
解決策:
このスニペットはユーザーのブラウザから言語を検出できます
$locale = null;
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($languages as $lang) {
$lang = str_replace('-', '_', trim($lang));
if (false === strpos($lang, '_')) {
$locale = strtoupper($lang);
} else {
$lang = explode('_', $lang);
if (count($lang) == 3) {
$locale = strtolower($lang[0]) . ucfirst($lang[1]) . strtoupper($lang[2]);
} else {
$locale = strtolower($lang[0]) . strtoupper($lang[1]);
}
}
}
}
echo $locale;
わからない
0
レビュー
答え :
解決策:
そこには何も入れません。コメントにあるように、変数を開始するだけです。
ヘッダーがすでに送信されているというエラーが発生した場合、つまり、header()を送信する前にページに情報を出力する場合は、 ob_start()、 ob_end_flush()。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。