您如何检测网站访问者的国家/地区(特别是美国或非美国)?

我需要为我网站的美国和非美国访问者显示不同的链接。这只是为了方便起见,所以我不寻求超高的准确性,安全性或欺骗不是问题。

我知道有地理定位服务和列表,但这似乎有点过分,因为我只需要(粗略地)确定这个人是否在美国。

我正在考虑使用JavaScript来获取用户的时区,但这似乎只给出了偏移量,因此加拿大,墨西哥和南美洲的用户将具有与美国人相同的价值。

在JavaScript或PHP中,除了抓取IP地址并进行查找之外,还有其他信息可以确定这一点吗?


答案 1

有一些免费服务可以让您从客户端进行基于国家/地区和IP的地理定位。

我使用过wipmania免费的JSONP服务,它使用起来非常简单:

<script type="text/javascript">
  // plain JavaScript example
  function jsonpCallback(data) { 
    alert('Latitude: ' + data.latitude + 
          '\nLongitude: ' + data.longitude + 
          '\nCountry: ' + data.address.country); 
  }
</script>
<script src="http://api.wipmania.com/jsonp?callback=jsonpCallback"
        type="text/javascript"></script>

或者,如果您使用支持JSONP的框架,例如jQuery,则可以:

// jQuery example
$.getJSON('http://api.wipmania.com/jsonp?callback=?', function (data) { 
  alert('Latitude: ' + data.latitude + 
        '\nLongitude: ' + data.longitude + 
        '\nCountry: ' + data.address.country); 
});

检查此处运行的上述代码段。


答案 2

最好的指标可能是 HTTP 接受语言标头。在 HTTP 请求中,它将如下所示:

GET / HTTP/1.1
Accept: */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; MDDC; OfficeLiveConnector.1.4; OfficeLivePatch.0.0; .NET CLR 3.0.30729)
Accept-Encoding: gzip, deflate
Host: www.google.com
Connection: Keep-Alive

您应该能够使用以下方法在 PHP 中检索此内容:

<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
?>