在 PHP 中检测客户端区域设置的最简单方法

2022-08-30 13:52:00

我希望能够使用PHP在我的网站上检测访问者来自哪个国家。

请注意,我并不是想将此用作安全措施或任何重要的事情,只是更改某些单词的拼写(美国人似乎认为“注册”一词有2个Ls....疯狂的yanks),也许在“选择你的国家”列表中给出一个默认选项。

因此,使用Geolocation数据库有点过分,我真的不想为此安装新的PHP库而烦恼,那么找到访问者来自哪个国家的最简单/最简单的方法是什么?


答案 1

PHP 从 5.3.0 开始就提供了一个函数,用于将变量解析为区域设置。$_SERVER['HTTP_ACCEPT_LANGUAGE']

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale; // returns "en_US"

文档:https://www.php.net/manual/en/locale.acceptfromhttp.php


答案 2

不能保证,但大多数浏览器都会提交一个 Accept-Language HTTP 标头,该标头指定 en-us(如果它们来自美国)。不过,一些较旧的浏览器只说它们是en。而且并非所有计算机都已正确设置以指示它们喜欢的区域设置。但这是一个很好的初步猜测。

基于英国英语的用户通常将其系统或用户区域设置设置为英语-英国,这在默认浏览器配置中应生成 en-gb 作为“接受语言”标头。(这个的早期版本说en-uk;这是一个错别字,对不起。其他国家/地区也有 en locales,例如 en-za(南非),并且从理论上讲,也可以使用 en-jp 等组合。

但是,基于Geo-IP的猜测在首选语言/区域设置上不太可能是正确的。谷歌认为基于IP地址地理位置的内容协商是有道理的,当我在日本或韩国时,这真的让我很烦恼......


推荐