парсинг — PHP: Какой самый надежный способ извлечь массив предпочитаемых пользователем языков (исключая региональные вариации) в порядке убывания предпочтений?

У меня очень специфический вопрос. Accept-Language: Заголовок HTTP содержит список языков (часто вместе с предпочтительными региональными вариантами для таких языков, на которые ИМХО было бы излишне обращать внимание в большинстве случаев от малых до средних веб-сайтов, хотя в некоторых случаях региональные различия могут быть достаточно значительными, чтобы разницу), а также относительные показатели качества, которые, когда они присутствуют, определяют степень предпочтения языка по шкале от 0 до 1. Содержимое этого заголовка отправляется по HTTP от клиента веб-браузера, который обычно собирает такие строка, основанная на списке языков, указанных его пользователем в пользовательском интерфейсе (для Firefox см. Меню -> Параметры -> Содержимое -> Языки -> Выбрать …; для Chrome см. Меню -> Настройки -> Просмотреть дополнительные настройки .. . -> Языки -> Язык и настройки ввода; для Opera см. Меню приложения -> Настройки -> Языки -> Предпочтительные языки; для Internet Explorer см. Настройки -> Свойства обозревателя -> Общие -> Внешний вид -> Языки) на сервер. где они я nterpreted.

Из того, что я видел, ценность Accept-Language: Заголовок, отправляемый этими браузерами, состоит из строки полей, разделенных запятыми, каждое из которых состоит из кода языка, за которым может следовать точка с запятой, за которой следует относительная подстрока фактора качества. q=qualityFactorHere где qualityFactorHere это число от нуля до единицы. На практике все браузеры, которые я тестировал, опускают подстроку относительного коэффициента качества для первого поля и произвольно и несколько непоследовательно включают в себя относительные коэффициенты качества для других полей, так что коэффициенты качества находятся в порядке убывания. Например, для браузера, в котором пользователь указал список языков en, zh-cn, zh-hk, esнеобработанный HTTP-заголовок может выглядеть следующим образом:

Accept-Language: en,zh-cn;q=0.8,zh-hk;q=0.5,es;q=0.3

или следующим образом:

Accept-Language: en,zh-cn;q=0.8,zh-hk;q=0.6,es;q=0.4

Для большинства практических целей обе строки передают одну и ту же информацию.

Итак, мой вопрос, учитывая, что содержимое значения этой строки доступно для PHP-кодеров через $_SERVER['HTTP_ACCEPT_LANGUAGE'] Переменная PHP, какой самый надежный способ извлечь массив PHP предпочтительных браузером языков (способом, который не зависит от региональных вариаций) в порядке убывания предпочтений?

Спасибо!!!

0

Решение

Как оказалось, задача на самом деле довольно проста. Вот код решения:

  function getLangArray() {

$fields = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);

for ($i = 0; $i < count($fields); $i++) {

$fields[$i] = substr($fields[$i], 0, 2);

}

return array_unique($fields);

}

var_dump(getLangArray()); // for debugging purposes only
// sample output: array(3) { [0]=> string(2) "en" [1]=> string(2) "zh" [3]=> string(2) "fr" }

С уважением.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]