我正在尝试获取尽可能多的关于用户访问网站的区域信息。使用ipinfo.io将IP映射到一个国家是一种方法,但我也在探索Accept Language头。在php中使用http_accept_语言获取此信息。我想问是否有人知道这是如何计算的?我知道这取决于浏览器,而且实现方式因浏览器而异,但是否有可用的文档或有趣的文章对此进行了介绍?
我在使用Linux,我的操作系统语言是英语,我有一个瑞典语键盘布局。对于chrome,我看到这个字符串:
en-US,en;q=0.8,nl;q=0.6,sv;q=0.4
这表明我对英语和瑞典语感兴趣,这是有道理的,但那里也有荷兰语,这可能来自哪里?
对于Firefox,我只看到:
en-US,en;q=0.5
有人对此做过更多的研究吗?关于如何获取网站访问者的区域信息,还有其他建议或评论吗?
谢谢!
最佳答案
这可能取决于浏览器和平台。在unix类型的操作系统上,可以使用locale
命令查找系统区域设置:
$ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=
您也可以使用相同的命令,或通过OSX系统首选项应用程序来设置。浏览器可能默认为系统区域设置,但大多数浏览器也会为用户提供一种在浏览器中更改其首选项的方法。请参见http://www.w3.org/International/questions/qa-lang-priorities.en.php以获得良好的概述。
下面是一些看起来与设置实际接受语言头相关的chrome代码:https://code.google.com/p/chromium/codesearch#chromium/src/ui/base/l10n/l10n_util.cc&q=AcceptLanguage&sq=package:chromium&type=cs&l=856
下面是一个与accept language头相关的firefox错误报告,其中包含许多有趣的讨论,以及与设置头相关的diff链接:https://bugzilla.mozilla.org/show_bug.cgi?id=1054739
这里有一篇Mozilla开发者文章,提供了一些关于Accept语言头的细节,以及一些相关的:https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation
最终,accept语言是由用户控制的(并且有很多浏览器扩展可以快速修改它),因此虽然检测用户的语言偏好很有用,但它不一定告诉您关于他们位置的任何信息。您可以将其与其他信息(如用户时区(可从javascript获得)结合起来,但如果您真的需要位置信息,那么http://ipinfo.io之类的信息是您的最佳选择。