如何使用PHP从$ _SERVER ['HTTP_ACCEPT_LANGUAGE']获取语言值?

Ste*_*ven 14 php regex localization http internationalization

<?php
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
echo $language;
?>
Run Code Online (Sandbox Code Playgroud)

当我使用Firefox测试的代码块,我得到的en-us,en;q=0.7,ja;q=0.3,

当我使用IE来测试代码块时,我明白了zh-cn.

$_SERVER['HTTP_ACCEPT_LANGUAGE']一个字符串的值?如何确定首选语言是中文还是日文?如何编写正则表达式来获取语言的值$_SERVER['HTTP_ACCEPT_LANGUAGE']

Pas*_*TIN 28

是的,值$_SERVER['HTTP_ACCEPT_LANGUAGE']是一个字符串 - 请参阅$_SERVER.

它的内容由浏览器发送 - 这解释了为什么根据您使用的浏览器获得不同的结果:最有可能的是,您的Firefox配置为请求英语(高优先级)或日语(低优先级)页面,而您的IE配置为请求中文页面.

这是因为HTTP标头可以包含:

  • 语言列表
  • optionnaly,带区域代码
  • 相关优先事项.

这个想法是服务器应该使用适合用户所要求的"最佳"语言进行响应.


关于解析该标题,此博客文章可能是一个有趣的读物:解析接受语言以检测用户的语言

有一部分代码被提议用来解析HTTP头 - 它会生成一个看起来像这样的数组(引用):

Array
(
    [en-ca] => 1
    [en] => 0.8
    [en-us] => 0.6
    [de-de] => 0.4
    [de] => 0.2
)
Run Code Online (Sandbox Code Playgroud)

这是一个语言数组,按优先级排序,按降序排列 - 这可能是你想要的.


fee*_*ela 6

从v5.3开始,PHP具有以下功能:

$locale = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
Run Code Online (Sandbox Code Playgroud)

请参阅:http://php.net/manual/en/locale.acceptfromhttp.php