你如何检测网站访问者的国家(特别是美国与否)?

Dav*_*ith 34 javascript php country timezone country-codes

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

我知道有地理位置定位服务和列表,但这似乎有点矫枉过正,因为我只需要(大致)确定这个人是否在美国.

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

在JavaScript或PHP中是否有任何其他信息可用,除了抓取IP地址和进行查找,以确定这一点?

CMS*_*CMS 48

有一些免费服务可以让你从客户端进行国家和基于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>
Run Code Online (Sandbox Code Playgroud)

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

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

检查上面的代码运行在这里.

  • 这不支持https :( (2认同)

Tay*_*ese 6

最佳指标可能是HTTP Accept-Language标头.它在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
Run Code Online (Sandbox Code Playgroud)

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

<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
?>
Run Code Online (Sandbox Code Playgroud)

  • 是什么决定了接受语言?它是由操作系统设置的,还是用户可以影响它?如果我的同事设置他的笔记本电脑使用中文,接受语言会是什么?那么,en-gb怎么样? (4认同)
  • @FrustratedWithFormsDesigner:接受语言由浏览器决定。如果用户愿意,可以对其进行操作。例如,在 firefox 下,转到 Preferences &gt; Content &gt; Languages (2认同)
  • 伙计们,尤其是泰勒,这看起来可能是我需要的解决方案。正如我所说,我不在乎用户是否假装来自其他地方,因为他们当然欢迎这样做。我将给它一些时间,看看我是否有其他好的选择,但谢谢! (2认同)

Far*_*nha 5

我会说地理定位是唯一一种甚至远程可靠的方法。但也有它根本没有帮助的情况。我不断访问那些认为我在法国的网站,因为我公司的骨干网就在那里,所有互联网流量都通过它。

HTTP Accept Header 不足以确定用户区域设置。它只告诉您用户选择什么作为他们的语言,这可能与他们所在的位置无关。更多关于这里