如何从HTTP_ACCEPT_LANGUAGE订购字符串

bon*_*nny 1 html php arrays string http-headers

可能重复:
HTTP_ACCEPT_LANGUAGE

我尝试编写语言选项工具。为此我用

$default_language = (strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));

if (eregi('af', $default_language)) {do something}
Run Code Online (Sandbox Code Playgroud)

现在我想在回显时订购字符串:

$_SERVER["HTTP_ACCEPT_LANGUAGE"]
Run Code Online (Sandbox Code Playgroud)

例如,用户指定了多种语言。

带有不同语言的Chrome示例:

 nl,en-gb;q=0.8,en;q=0.6,fr;q=0.4,fr-ca;q=0.2
Run Code Online (Sandbox Code Playgroud)

因此,我如何读出字符串以一定的顺序显示它,nl这是我首选的第一语言。

该代码应类似于:

if ('nl'== array[0]) {do something}
Run Code Online (Sandbox Code Playgroud)

因此,如果有人可以帮助我,我将不胜感激。

非常感谢。

Zaf*_*ffy 5

HTTP / 1.1标头字段定义

可以给每个语言范围一个相关的质量值,该质量值表示用户对该范围指定的语言的偏好估计。质量值默认为“ q = 1”。

您必须遍历各种语言,然后选择一种质量最高(优先)的语言;像这样:

$preferred = "en"; // default
if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
{
    $max   = 0.0;
    $langs = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
    foreach($langs as $lang)
    {
        $lang = explode(';', $lang);
        $q    = (isset($lang[1])) ? ((float) $lang[1]) : 1.0;
        if ($q > $max)
        {
            $max = $q;
            $preferred = $lang[0];
        }
    }
    $preferred = trim($preferred);
}
// now $preferred is user's preferred language
Run Code Online (Sandbox Code Playgroud)

如果Accept-Language未发送标头,则所有语言均可接受。