解析HTTP_ACCEPT_LANGUAGE

时间:2011-08-08 01:16:21

标签: php arrays

我遇到了解析HTTP_ACCEPT_LANGUAGE的脚本:http://www.thefutureoftheweb.com/blog/use-accept-language-header

此脚本返回包含可接受语言的ORDERED数组:

阵 (     [it] => 1     [ar] => 0.8     [ja] => 0.6     [cn] => 0.4     [de] => 0.2 )

现在,我想创建一个包含可用语言的数组:

$ av_lang = array('en','fr','de','it'); (无序数组)

然后我想遍历第一个数组并获取第二个数组中的第一个键。

例如,它从第一个数组中取出'en'并检查第二个数组中是否存在,如果不存在,则转到下一个键'ar'并检查它。如果没有,则返回一个默认的lang,如'en'。

最后,我想在$ av_lang中获得一个可用的lang。

感谢。

2 个答案:

答案 0 :(得分:8)

我个人使用这样的东西:

$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
preg_match_all('/(\W|^)([a-z]{2})([^a-z]|$)/six', $lang, $m, PREG_PATTERN_ORDER);
$user_langs = $m[2];

你得到的是一系列双字母语言,然后你可以遍历它们并找到你支持的语言,即

$supported_langs = array('en', 'fr', 'de', 'it');
$user_lang = 'en'; // Default
foreach($user_langs AS $tmp){
    if(in_array($tmp, $supported_langs)){
        $user_lang = $tmp;
        break;
    }
}

此时$user_lang现在将包含标题中支持的第一种语言(或默认值)

答案 1 :(得分:6)

尝试这样的事情:

$lang = array('it' => 1, 'ar' => 0.8, 'ja' => 0.6, 'cn' => 0.4, 'de' => 0.2);
$preferred = array('en', 'ja');

$intersect = array_values(array_intersect(array_keys($lang), $preferred));

if (isset($intersect[0])) {
    echo $intersect[0]; // returns ja
}