Скрипт обнаружения языка PHP
После того, как я прочитал кое-что в Интернете, я разработал этот PHP-скрипт для определения языка браузера и перенаправления пользователя на правильную версию веб-сайта. Короче говоря, если у пользователя есть браузер на шведском языке, то скрипт должен перенаправить на index.php, если нет, то он должен перенаправить пользователя на en.php.
Он отлично работает на некоторых компьютерах и мобильных телефонах, а в других блокирует веб-сайт. Я полагаю, что сценарий не в порядке и вызывает некоторые конфликты в старых браузерах.
Итак, не могли бы вы взглянуть на мой сценарий и сказать мне, если я делаю что-то не так и как я могу это исправить?
Ура!
<?php
include ('administration/fonts.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 == "sv"){
header("location: index.php");
exit();
}
else if($lc == "en"){
header("location: en.php");
exit();
}
?>
PS - Да, сценарий находится перед тегом, и между тегом "?>" И тегом нет пробелов.
1 ответ
Новый ответ после добавления подробностей из ОП.
Английские пользователи должны быть перенаправлены, но шведский пользователь должен остаться на этом сайте, поэтому мы перепишем код следующим образом (я добавил комментарии с // Reeno
):
<?php
include ('administration/fonts.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'])){
// Reeno: I added strtolower() if some browser sends upper case letters
$lc = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
}
// Now we simply evaluate that variable to detect specific languages
// Reeno: Redirect all non-Swedish users to the English page (they can have "en", but also "dk", "de", "fr"...
if($lc != "sv"){
header("location: http://www.domain.com/en.php");
exit();
}
// Reeno: Swedish users stay on this site
?>
HTML code...
Старый ответ
Вы проверяете на $lc == "sv"
а также $lc == "en"
но вы забыли третий случай: $lc
может быть пустым!
Перепишите if в конце так, чтобы каждый, у кого не шведский браузер, en.php
:
if($lc == "sv"){
header("location: index.php");
exit();
}
else {
header("location: en.php");
exit();
}
?>
кстати header("location: ...");
требует абсолютного URI, как header("location:http://www.domain.com/en.php");
(некоторые клиенты также принимают относительные URI)