Intereting Posts
добавление идентификатора пользователя из базы данных в данные сеанса в Codeigniter? Постоянное обновление текстовой игры PHP Как я могу решить кодировку языка PHP на веб-странице? Лучший способ проверить существование переменной в PHP; isset () явно сломан Как отлаживать ошибки сессии / входа в PHP? Почему парадигма MVC лучше всего подходит для веб-приложений? Обновление информации о базе данных с помощью кнопки onclick база данных codeigniter перемещается в другую таблицу Ошибка при отправке пакета QUERY Пользовательская конечная точка WooCommerce API v3 Объект объекта Doctrine для массива Получение недопустимых символов в методе get_browser () выполняется в php Каков самый быстрый и эффективный способ хранения и получения изображений, когда у вас есть миллионы пользователей на сервере LAMP? как размещать на google плюс страницы через api? PHP-модели баз данных, которые синхронизируются с базой данных?

Проверка языка браузера на PHP?

Как я могу проверить язык браузера пользователя PHP?

Мне нужно показать другую страницу для людей в США и Великобритании.

Я безуспешно пробовал следующий код

<?php if(ereg("us", $_SERVER["HTTP_ACCEPT_LANGUAGE"])) include('http://page.com/us.txt'); else include('http://page.com/uk.txt'); ?> 

Я запускаю специальный код для людей в США и для них в Великобритании.

Solutions Collecting From Web of "Проверка языка браузера на PHP?"

Вероятно, просто проблема чувствительности к регистру; eregi ('en-us') или preg_match ('/ en-us / i') должны были поднять его.

Тем не менее, просто поиск «en-us» в заголовке может иногда ошибиться, особенно когда перечислены как языки США, так и Великобритании. «Accept-Language» на самом деле довольно сложный заголовок, который действительно нужен для правильного парсера.

Если у вас есть PECL, вся работа уже выполнена для вас: http://www.php.net/manual/en/function.http-negotiate-language.php

Я не знаю, почему другие ответы идут для заголовка User-Agent; это совершенно фиктивный. Пользователь-агент не имеет права удерживать языковое значение в любом конкретном месте, а для некоторых браузеров (например, Opera и некоторых второстепенных браузеров, о которых я никогда не слышал, называется «Internet Explorer»), это совсем не будет. Там, где он содержит язык, это будет язык, на котором была установлена ​​сборка браузера, а не предпочтительный язык пользователя, на который вы должны смотреть. (Этот параметр будет использоваться по умолчанию для языка сборки, но может быть настроен пользователем из пользовательского интерфейса предпочтений.)

Попробуй это:

 <? if(preg_match('/en-us/i', $_SERVER['HTTP_USER_AGENT'])) include('http://page.com/us.txt'); else include('http://page.com/uk.txt'); ?> в <? if(preg_match('/en-us/i', $_SERVER['HTTP_USER_AGENT'])) include('http://page.com/us.txt'); else include('http://page.com/uk.txt'); ?> в <? if(preg_match('/en-us/i', $_SERVER['HTTP_USER_AGENT'])) include('http://page.com/us.txt'); else include('http://page.com/uk.txt'); ?> 

Вероятнее всего, более надежный способ сделать это – выполнить регулярное выражение в строке $_SERVER['HTTP_USER_AGENT'] .

 <?php if(preg_match('/en-US/', $_SERVER['HTTP_USER_AGENT'])) include('http://page.com/us.txt'); else include('http://page.com/uk.txt'); ?> в <?php if(preg_match('/en-US/', $_SERVER['HTTP_USER_AGENT'])) include('http://page.com/us.txt'); else include('http://page.com/uk.txt'); ?> в <?php if(preg_match('/en-US/', $_SERVER['HTTP_USER_AGENT'])) include('http://page.com/us.txt'); else include('http://page.com/uk.txt'); ?> 

Вам не гарантируется получение правильной и полезной строки пользовательского агента, поэтому убедитесь, что оператор else содержит разумную альтернативу.

Это решение на основе zend. Он также будет работать, когда вы добавите другие языки.

 <?php include_once "Zend/Locale.php"; $zend_locale = new Zend_Locale(Zend_Locale::BROWSER); // returns en for English, de for German etc. echo $browser_language = $zend_locale->getLanguage(); echo "<br />\n"; // returns en_US for American English, en_GB for British English etc. echo $browser_locale = $zend_locale->toString(); echo "<br />\n"; 

Решение видно на:

http://www.mpopp.net/2010/07/how-to-detect-the-users-preferred-language-smarter-than-google/