正确理解和解析HTTP_ACCEPT_LANGUAGE

时间:2018-03-21 14:55:35

标签: php http

我想知道HTTP_ACCEPT_LANGUAGE的字符串是如何确定的。 如果用户具有以下字符串: "HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.9,he;q=0.8"

  • 如何确定这些逗号分隔参数(操作系统,浏览器,IP-> geo?)
  • 这些参数是什么意思?

SideQuestion:获取操作系统语言的HTTP请求是否有任何部分?

我浏览了谷歌,但我无法理解q=n质量价值,请,请不要复制谷歌或PHP.NET,我也可以搜索和阅读,我会喜欢理解并充分利用http请求的大部分内容。

谢谢, 芽

3 个答案:

答案 0 :(得分:1)

字符串由客户端软件确定。客户可以根据需要请求任何语言。服务器没有义务遵守。

可以找到描述字符串格式的规则here

quality value表示优先级,首先排序更高的值。根据您的示例,回答此请求的服务器应尝试提供英语作为首选,然后是希伯来语。

您可能不需要自己解析这个问题。您可以使用类似locale_accept_from_http()的内容。

答案 1 :(得分:1)

一般来说,Accept-Language可以使用以下形式之一:

  1. Accept-Language: *,表示您已准备好接受任何语言。
  2. Accept-Language: <language>,其中<language>代表语言代码,通常为2个字母。
  3. Accept-Language: <language-locale>,其中<language-locale>可以被视为<language>的扩展形式,
  4. 复合表单,您已经举例说明:"en-US,en;q=0.9,he;q=0.8"
  5.   

    如何确定这些逗号分隔参数(操作系统,浏览器,IP-&gt; geo?)

    浏览器从操作系统语言设置中检索默认值。

    用户可以从浏览器的设置面板手动设置首选语言。如果设置了多种语言,则其顺序为Accept-Language中的顺序。

      

    这些参数是什么意思?

    它们是<quality>-<language>对的列表,以;分隔。

    默认质量为1,因此您的Accept-Language值实际为:

    q=1,en-US,en;q=0.9,he;q=0.8,rest of languages...

      

    是否有HTTP请求的任何部分来获取操作系统语言?

    没有

      

    我无法理解q = n质量值。

    正如所解释的那样。

答案 2 :(得分:1)

将@q的值添加到@Yuankun的答案中,然后查看RFC7231 section-5.3.5(已淘汰RFC 2616)似乎不太正确。

应为<language-range>;<quality>, ...,以使示例字符串

en,en-US,en-AU;q=0.8,fr;q=0.6,en-GB;q=0.4

最终显示为

  • en;q=1
  • en-US;q=1
  • en-AU;q=0.8
  • fr;q=0.6
  • en-GB;q=0.4