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

标签 php regex http localization internationalization

<?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/

相关文章:

php - 用 PHP 解读单词的最佳方法是什么?

php - 检查自日期以来耗时是否超过 X 天

php - 使用php备份数据库mysql

python - 模式匹配问题

java - 使用RegEx在html源中查找特定字符串

java - 如何在 Android 中发起 http get 请求

php - .htaccess 删除扩展名不起作用

php - 如果至少有一个属于范围内,如何选择类别中的所有内容

regex - sed替换多个xml标签

http - 如何解释 Firefox 和 Safari 对用户提供的包含多个 # 符号的 URI 的不同处理方式?哪个是 'right' ?