我希望能够使用PHP检测访问者在我的网站上的国家/地区.
请注意,我不是试图将此作为安全措施或任何重要的事情,只是改变一些单词的拼写(美国人似乎相信"招生"这个词有2个......疯狂的猛拉),以及也许在"选择你的国家/地区"列表中提供默认选项.
因此,使用Geolocation数据库有点过头了,我真的不想为此安装新的PHP库,那么查找访问者来自哪个国家/地区的最简单/最简单的方法是什么?
PHP提供了一个自5.3.0以来的函数来将$ _SERVER ['HTTP_ACCEPT_LANGUAGE']变量解析为语言环境.
http://www.php.net/manual/en/locale.acceptfromhttp.php
$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); echo $locale; // returns "en_US"
不保证,但大多数浏览器提交一个Accept-Language HTTP标头,如果它们来自美国,则指定en-us.但是,一些较旧的浏览器只表示它们是en.并非所有机器都已正确设置以指示他们喜欢的区域设置.但这是一个很好的初步猜测.
英语 - 英国用户通常将他们的系统或用户区域设置为英语 - 英语,在默认浏览器配置中,应该将en-gb设置为Accept Language标头.(这个说明的早期版本;这是一个错字,抱歉.)其他国家也有en语言,如en-za(南非),并且,主要在理论上,像en-jp这样的组合也是可能的.
但是,基于地理IP的猜测在首选语言/区域设置上的可能性较小.Google认为基于IP地址定位的内容协商是有道理的,当我在日本或韩国时,这真让我烦恼......
您可以查看HTTP_ACCEPT_LANGUAGE
大多数浏览器将发送的标头(来自$ _SERVER).
以Zend_Locale为例,或者您甚至可能想要使用lib.
您可以进行一些IP比较,而无需使用整个库.
使用API,这样就不需要你了.这是一个让您了解国家/地区的网络API:
Example: http://api.hostip.info/get_html.php?ip=12.215.42.19 Return : Country: UNITED STATES (US)
但是,您是否认为使用浏览器代理语言?你或许可以从中知道英语的类型.
这个名为BlockCountry的网站让您按国家/地区列出IP列表.当然,您不想阻止,但您可以使用IP列表并比较它们(获取所有美国IP ...)这可能不准确...