我需要通過使用PHP的IP地址獲取訪問我的網站的用戶的語言。我該怎麼做,有任何API可以做到這一點,請告知如何通過使用php的ip地址獲取用戶語言?
回答
您可以使用任何geoIP模塊。它允許你通過IP檢測國家。但這不是很正確的方法。例如我現在在泰國(我有泰國知識產權),但我的語言是俄語:)
當谷歌以泰語顯示我的網頁時,這不是很好。
對於檢測語言,您可以使用瀏覽器中的標題。首選語言列在此標題中。
感謝您的評論 – sathyan
這是關於accept語言頭文件的討論信息。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html這裏是一種關於它的FAQ http://www.w3.org/International/questions/qa-accept-lang-locales –
雖然您可以對IP地址進行查找以瞭解一般物理位置,但物理位置可能與您查找IP地址的人的語言無關。
例如,當IP位置可能是美國的紐約地區時,因爲他們正在訪問該地區,所以該人可以說普通話作爲他們的主要語言。
這裏,你可以使用IP地址查找http://ipinfodb.com/ip_location_api.php
下面是可能會有所幫助,以及一個計算器討論Get user location by IP address in C#的服務。
但是,您需要提供允許更改語言選項的機制。並使用cookie或類似的東西來記住語言選擇。
位置信息的最常見用途是提供更有可能對該位置的人有用的有針對性的廣告。
編輯:移動設備
由於移動設備和智能手機訪問互聯網通過高速的3G和4G蜂窩網絡的使用正變得越來越普遍,一個問題是IP地址的地理位置是否適合這些類型的設備。
簡短的回答是,不是很好。請參閱本文,來自Microsoft Research的Where's that Phone?: Geolocating IP Addresses on 3G Networks。
此外,這裏是一個stackoverflow question on mobile phone location from a HTTP request。
這裏是一篇文章,Geolocating IP addressesin Cellular Data Networks,提供了一些關於這個問題的信息。
使用GeoIP的模塊之前已提出,然後在項目中的某處插入此代碼:
if($country = geoip_country_code_by_name($host))
{
switch($country)
{
case "DJ":
case "ER":
case "ET":
$lang = "aa";
break;
case "AE":
case "BH":
case "DZ":
case "EG":
case "IQ":
case "JO":
case "KW":
case "LB":
case "LY":
case "MA":
case "OM":
case "QA":
case "SA":
case "SD":
case "SY":
case "TN":
case "YE":
$lang = "ar";
break;
case "AZ":
$lang = "az";
break;
case "BY":
$lang = "be";
break;
case "BG":
$lang = "bg";
break;
case "BD":
$lang = "bn";
break;
case "BA":
$lang = "bs";
break;
case "CZ":
$lang = "cs";
break;
case "DK":
$lang = "da";
break;
case "AT":
case "CH":
case "DE":
case "LU":
$lang = "de";
break;
case "MV":
$lang = "dv";
break;
case "BT":
$lang = "dz";
break;
case "GR":
$lang = "el";
break;
case "AG":
case "AI":
case "AQ":
case "AS":
case "AU":
case "BB":
case "BW":
case "CA":
case "GB":
case "IE":
case "KE":
case "NG":
case "NZ":
case "PH":
case "SG":
case "US":
case "ZA":
case "ZM":
case "ZW":
$lang = "en";
break;
case "AD":
case "AR":
case "BO":
case "CL":
case "CO":
case "CR":
case "CU":
case "DO":
case "EC":
case "ES":
case "GT":
case "HN":
case "MX":
case "NI":
case "PA":
case "PE":
case "PR":
case "PY":
case "SV":
case "UY":
case "VE":
$lang = "es";
break;
case "EE":
$lang = "et";
break;
case "IR":
$lang = "fa";
break;
case "FI":
$lang = "fi";
break;
case "FO":
$lang = "fo";
break;
case "BE":
case "FR":
case "SN":
$lang = "fr";
break;
case "IL":
$lang = "he";
break;
case "IN":
$lang = "hi";
break;
case "HR":
$lang = "hr";
break;
case "HT":
$lang = "ht";
break;
case "HU":
$lang = "hu";
break;
case "AM":
$lang = "hy";
break;
case "ID":
$lang = "id";
break;
case "IS":
$lang = "is";
break;
case "IT":
$lang = "it";
break;
case "JP":
$lang = "ja";
break;
case "GE":
$lang = "ka";
break;
case "KZ":
$lang = "kk";
break;
case "GL":
$lang = "kl";
break;
case "KH":
$lang = "km";
break;
case "KR":
$lang = "ko";
break;
case "KG":
$lang = "ky";
break;
case "UG":
$lang = "lg";
break;
case "LA":
$lang = "lo";
break;
case "LT":
$lang = "lt";
break;
case "LV":
$lang = "lv";
break;
case "MG":
$lang = "mg";
break;
case "MK":
$lang = "mk";
break;
case "MN":
$lang = "mn";
break;
case "MY":
$lang = "ms";
break;
case "MT":
$lang = "mt";
break;
case "MM":
$lang = "my";
break;
case "NP":
$lang = "ne";
break;
case "AW":
case "NL":
$lang = "nl";
break;
case "NO":
$lang = "no";
break;
case "PL":
$lang = "pl";
break;
case "AF":
$lang = "ps";
break;
case "AO":
case "BR":
case "PT":
$lang = "pt";
break;
case "RO":
$lang = "ro";
break;
case "RU":
case "UA":
$lang = "ru";
break;
case "RW":
$lang = "rw";
break;
case "AX":
$lang = "se";
break;
case "SK":
$lang = "sk";
break;
case "SI":
$lang = "sl";
break;
case "SO":
$lang = "so";
break;
case "AL":
$lang = "sq";
break;
case "ME":
case "RS":
$lang = "sr";
break;
case "SE":
$lang = "sv";
break;
case "TZ":
$lang = "sw";
break;
case "LK":
$lang = "ta";
break;
case "TJ":
$lang = "tg";
break;
case "TH":
$lang = "th";
break;
case "TM":
$lang = "tk";
break;
case "CY":
case "TR":
$lang = "tr";
break;
case "PK":
$lang = "ur";
break;
case "UZ":
$lang = "uz";
break;
case "VN":
$lang = "vi";
break;
case "CN":
case "HK":
case "TW":
$lang = "zh";
break;
default:break;
}
}
這樣做不是很簡單嗎?它看起來很可怕! – Ben
它不必看起來不錯......將它包裹在一個功能中,如果它傷害了你的眼睛,不要再看它。 – user3097651
function ipToCountry($ip) { $info = file_get_contents("http://who.is/whois-ip/ip-address/$ip"); list($a, $b) = explode('COUNTRY: ', strtoupper($info)); return substr(trim($b),0,2); } function geLangCode() { $countryCode = library::ipToCountry($_SERVER['REMOTE_ADDR']); return $yourQuery }
您確定返回該國的語言代碼? –
是的,我確定,你可以試試 – Amol
你可以試試我的API,https://ipinfo.io。它返回JSON在默認情況下,與一羣不同領域:
$ curl ipinfo.io
{
"ip": "24.6.61.239",
"hostname": "c-24-6-61-239.hsd1.ca.comcast.net",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.3845,-122.0881",
"org": "AS7922 Comcast Cable Communications, LLC",
"postal": "94040"
}
詳情請參閱https://ipinfo.io/developers。
如果您要這樣做來檢測語言,您最好查看Accept-Language
標題,但這是根據用戶的偏好設置的,而不是根據用戶的當前位置猜測他們可能說的語言。
- 1. 如何通過IP地址檢測用戶的語言
- 2. 如何使用用戶IP地址獲取用戶位置?
- 3. 當用戶使用IP地址打開網站時如何獲取IP地址?
- 4. 通過他的IP獲取用戶的地址詳細信息?
- 5. 獲取使用PHP的用戶的IP地址
- 6. 使用PHP file_get_contents獲取IP地址
- 7. 如何在PHP中獲取用戶的IP地址?
- 8. 如何使用R獲取IP地址?
- 9. 如何使用.NET代碼獲取用戶的IP地址?
- 10. 如何使用node.js在bot中獲取用戶的IP地址?
- 11. 如何使用socket.io獲取用戶的IP地址?
- 12. 如何使用.net獲取用戶的IP地址?
- 13. 通過ip地址獲取用戶位置 - ipinfo.io
- 14. 如何使用php獲取本地ip地址?
- 15. 獲取用戶的IP地址
- 16. 獲取網絡用戶的IP地址
- 17. 如何使用C#獲取IP地址的物理(MAC)地址?
- 18. 如何從CLI獲取使用PHP的服務器IP地址?
- 19. 如何獲取客戶端IP地址
- 20. 如何獲取客戶端IP地址
- 21. 如何獲取使用php請求的服務器地址的IP地址?
- 22. 獲取Facebook用戶IP地址
- 23. 從用戶獲取IP地址
- 24. 如何獲取客戶端/用戶的IP地址?
- 25. 如何在客戶端使用IP地址獲取GMT時間?
- 26. 如何使用socket.io獲取客戶端IP地址?
- 27. 如何使用jQuery獲取客戶端IP地址
- 28. 如何使用TcpClient獲取客戶端IP地址?
- 29. 如何使用Oracle APEX獲取遠程客戶端IP地址?
- 30. 如何使用libssh獲取客戶端ip地址
可能的重複:http://stackoverflow.com/questions/3650006/get-country-of-ip-address-with-php – George
我不同意@ F4r-20,這是要求用戶的語言,而不是國家。 –
這就是說,@sathyan,這可能是你必須猜測的東西,因爲我可以有一個澳大利亞IP地址,但只說西班牙語(作爲一個例子)。 –