Php 添加浏览器语言检测后,语言href锚(hl)停止工作

Php 添加浏览器语言检测后,语言href锚(hl)停止工作,php,html,Php,Html,我知道如何在PHP中检测语言浏览器,以及如何检测语言href锚点以切换到另一个 我的旧代码没有来自http的locale\u accept\u($\u SERVER['http\u accept\u LANGUAGE']): 这些旧代码对于语言锚非常有效。比如: <a class="waves-effect" href="?hl=en_GB" name="en">English</a> <a class="waves-effect" href="?hl=pt_BR"

我知道如何在PHP中检测语言浏览器,以及如何检测语言href锚点以切换到另一个

我的旧代码没有来自http的
locale\u accept\u($\u SERVER['http\u accept\u LANGUAGE'])

这些旧代码对于语言锚非常有效。比如:

<a class="waves-effect" href="?hl=en_GB" name="en">English</a>
<a class="waves-effect" href="?hl=pt_BR" name="pt_BR">Português Brasileiro</a>
只有浏览器语言的检测工作得很好,但是语言href锚(hl)不工作,因为如果切换到葡萄牙语,页面仍然是英语的

类似于:

switch ($lang):
  case "en":
    $language = "en";
    break;
  case "en_GB":
    $language = "en_GB";
    break;
  case "pt_BR":
    $language = "pt_BR";
    break;
  case "pt_PT":
    $language = "pt_PT";
    break;
endswitch;

但我不想重复这些旧代码。我想继续压缩和缩短相同的新代码。

我不明白switch语句在这里做什么? 它不起作用的原因是,您没有在任何情况下使用$lang变量,它只是在所有情况下将$language设置为自身

我想这会满足你的要求:

$language = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);

if (isset($_GET['hl'])) 
{
    $language = $_GET['hl'];
}
由于用户可以修改查询参数,我还建议使用in_数组检查值是否符合预期

switch ($lang):
  case "en":
    $language = "en";
    break;
  case "en_GB":
    $language = "en_GB";
    break;
  case "pt_BR":
    $language = "pt_BR";
    break;
  case "pt_PT":
    $language = "pt_PT";
    break;
endswitch;
$language = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);

if (isset($_GET['hl'])) 
{
    $language = $_GET['hl'];
}