Подтвердить что ты не робот

Самый простой способ определить локализацию клиента в PHP

Я хотел бы иметь возможность определять, в какой стране посетитель, с моего сайта, используя PHP.

Обратите внимание, что я не пытаюсь использовать это в качестве меры безопасности или для чего-либо важного, просто изменяя написание некоторых слов (американцы, кажется, считают, что слово "зачисление" имеет 2 Ls.... сумасшедшие янки ) и, возможно, указать параметр по умолчанию в списке "Выберите свою страну".

Таким образом, использование базы данных Geolocation - это чуть-чуть сверху, и я действительно не хочу гадать с установкой новых библиотек PHP только для этого, поэтому , что самый простой/самый простой способ найти то, что страна посетитель от?

4b9b3361

Ответ 1

Не гарантируется, но большинство браузеров представляют HTTP-заголовок Accept-Language, который указывает en-us, если они из США. Некоторые старые браузеры только сказали, что они en. И не все машины настроены правильно, чтобы указать, какой язык они предпочитают. Но это хорошая первая догадка.

Английские пользователи, основанные на Великобритании и Великобритании, обычно устанавливают свою систему или пользовательскую локаль на английский-британский, что в конфигурациях браузера по умолчанию должно приводить к появлению en-gb в качестве заголовка Accept Language. (Ранняя версия этого сказанного en-uk, это была опечатка, извините). В других странах также есть en locales, такие как en-za (южная африка) и, в основном теоретически, такие комбинации, как en-jp, также возможны.

Предположения на основе Geo-IP будут, скорее всего, правильными на предпочтительном языке/локали. Google считает, что согласование контента на основе геолокации IP-адреса имеет смысл, что меня действительно раздражает, когда я нахожусь в Японии или Корее...

Ответ 2

Начиная с версии 5.3.0, PHP предоставляет функцию для анализа переменной $_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

Ответ 3

Вы можете проверить заголовок HTTP_ACCEPT_LANGUAGE (из $_SERVER), который отправит большинство браузеров.

Взгляните на Zend_Locale для примера, или, может быть, вы даже захотите использовать lib.

Ответ 4

Вы можете сделать IP comparaison без, имея для этого всю библиотеку.

Решение №1

Использовать API, так что с вашей стороны ничего не нужно. Это веб-API, который позволяет вам узнать страну:

 Example: http://api.hostip.info/get_html.php?ip=12.215.42.19
 Return : Country: UNITED STATES (US)

Решение № 2

Но, думаете ли вы использовать язык агента браузера? Вы могли бы знать тип английского из него.

Решение № 3

Этот веб-сайт BlockCountry позволяет вам иметь список IP-адресов по странам. Конечно, вы не хотите блокировать, но вы можете использовать список IP-адресов и сравнить их (получить все IP-адреса US...), это может быть неточно...

Ответ 5

Учитывая указанную цель, заголовок Accept-Language является более подходящим решением, чем геолокация на основе IP. Действительно, это точно намеченная цель Accept-Language.

Ответ 6

Выполните анализ $_SERVER["HTTP_ACCEPT_LANGUAGE"], чтобы узнать страну и локаль браузера.

Ответ 7

Для определения вашей страны посетителя я использовал GeoIP расширение, очень прост в использовании.

Ответ 8

Я использую HTTP_ACCEPT_LANGUAGE

    $localePreferences = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
    if(is_array($localePreferences) && count($localePreferences) > 0) {
       $browserLocale = $localePreferences[0];
       $_SESSION['browser_locale'] = $browserLocale;
    }

Ответ 9

Служба http://countries.nerd.dk - это то, что я использую для сопоставления IP-to-country. Он работает очень хорошо и основывается на DNS, также хорошо кэшируется.

Вы также можете загрузить базу данных для локального использования, если не хотите полагаться на внешнюю службу.

Ответ 10

Расширение GeoIP - хороший выбор.

Ответ 11

Или вы можете сделать следующее:

скачать 'geoip.dat' и geoip.inc из http://www.maxmind.com/app/geoip_country

в заголовке geoip.inc вы найдете, как его использовать (например, инициализировать и остальное...)

Ответ 12

Одна вещь, которую хочет видеть зритель, вторая - которую вы можете обслуживать:

$SystemLocales = explode("\n", shell_exec('locale -a'));
$BrowserLocales = explode(",",str_replace("-","_",$_SERVER["HTTP_ACCEPT_LANGUAGE"])); // brosers use en-US, Linux uses en_US
for($i=0;$i<count($BrowserLocales);$i++) {         
  list($BrowserLocales[$i])=explode(";",$BrowserLocales[$i]); //trick for "en;q=0.8"
  for($j=0;$j<count($SystemLocales);$j++) {
    if ($BrowserLocales[$i]==substr($SystemLocales[$j],0,strlen($BrowserLocales[$i]))){
      setlocale(LC_ALL, $SystemLocales[$j]);
      break 2; // found and set, so no more check is needed
    }
  }
}

например, моя система обслуживает только:

  • С
  • POSIX
  • pl_PL.UTF-8

и мои языки браузера: pl, en-US, en = > , поэтому единственной правильной локалью является pl_PL.UTF-8.

Если успешное сравнение не найдено, то не существует setlocale вообще.