<?php
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
echo $language;
?>
当我使用 Firefox 测试这段代码时,我得到 en-us,en;q=0.7,ja;q=0.3
,
当我用IE测试代码块时,我得到了zh-cn
。
$_SERVER['HTTP_ACCEPT_LANGUAGE']
的值是字符串吗?如何判断首选语言是中文还是日文?如何编写正则表达式以从 $_SERVER['HTTP_ACCEPT_LANGUAGE']
的值中获取语言?
最佳答案
是的,$_SERVER['HTTP_ACCEPT_LANGUAGE']
的值是一个字符串 -- 参见 $_SERVER
.
它的内容由浏览器发送——这解释了为什么根据您使用的浏览器会得到不同的结果:很可能,您的 Firefox 配置为请求英文页面(高优先级)或日语(低优先级),而您的 IE 配置为请求中文页面。
这是因为 HTTP header 可以包含:
- 语言列表
- 可选,带有地区代码
- 具有相关的优先级。
想法是服务器应该响应,使用适合“最佳”用户请求的语言。
关于解析该 header ,这篇博文可能很有趣:Parse Accept-Language to detect a user's language
建议使用一部分代码来解析该 HTTP header ——它会生成一个如下所示的数组(引用):
Array
(
[en-ca] => 1
[en] => 0.8
[en-us] => 0.6
[de-de] => 0.4
[de] => 0.2
)
这是一个语言数组,按优先级降序排列——这可能就是您想要的。
关于php - 如何使用 PHP 从 $_SERVER ['HTTP_ACCEPT_LANGUAGE' ] 获取语言值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2316476/