надежное пользовательское определение браузера с php

При попытке обнаружить браузер пользователя с PHP только, $ _SERVER ['HTTP_USER_AGENT'] надежный путь? Я должен вместо этого выбрать функцию get_browser? то, какой делают Вы находите, приносит более точные результаты?

Если этот метод прагматичен, это опрометчивый использовать его для вывода подходящих ссылок CSS, например:

if(stripos($_SERVER['HTTP_USER_AGENT'],"mozilla")!==false)
   echo '';

Я заметил этот вопрос, однако я хотел разъясниться, хорошо ли это для ориентированного на CSS обнаружения.

ОБНОВЛЕНИЕ: что-то действительно подозрительное: Я попробовал echo $_SERVER['HTTP_USER_AGENT']; на IE 7 и это - то, что он произвел:

Mozilla/4.0 (совместимый; MSIE 7.0; Windows NT 6.0; SLCC1;.NET CLR 2.0.50727; медиацентр ПК 5.0;.NET CLR 3.5.30729;.NET CLR 3.0.30618)

Safari дал что-то странное с "Mozilla" в нем также. Что дает?

32
задан Community 23 May 2017 в 12:26
поделиться

3 ответа

Использование существующего метода (например, get_browser ), вероятно, лучше, чем писать что-то самостоятельно, поскольку он имеет (лучшую) поддержку и будут обновляться более новыми версиями. Также могут быть полезные библиотеки для надежного получения идентификатора браузера.

Декодирование $ _ SERVER ['HTTP_USER_AGENT'] затруднено, поскольку многие браузеры имеют очень похожие данные и склонны (неправильно) использовать их в собственных интересах. Но если вы действительно хотите их декодировать, вы можете использовать информацию на этой странице для всех доступных идентификаторов агентов. Эта страница также показывает, что ваш пример вывода действительно принадлежит IE 7. Более подробную информацию о полях в самом идентификаторе агента можно найти на этой странице , но, как я уже сказал, браузеры имеют тенденцию использовать его для своей выгоды, и он может быть в (немного) другом формате.

16
ответ дан 27 November 2019 в 20:00
поделиться

Свойство css word-wrap: break-word принудительно переносит длинные слова в следующую строку, если они слишком длинные для контейнера. Это поддерживается IE (путь назад), Firefox и Safari.

Edit: Похоже, вы можете достичь этого в старых версиях Firefox, а также с помощью white-space: -moz-pre-wrap и white-space: pre-wrap . Для получения дополнительной информации см. здесь . Я не тестировал это со старыми версиями Firefox.

-121--1573120-

Я думаю, что полагаться на userAgent немного слабо, так как он может (и) часто подделывается.

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

<link type="text/css" rel="stylesheet" href="styles.css"/><!--for all-->
<!--[if IE]>
  <link type="text/css" rel="stylesheet" href="ie_styles.css"/>
<![endif]-->

или если вы просто хотите один для IE6:

<!--[if IE 6]>
  <link type="text/css" rel="stylesheet" href="ie6_styles.css"/>
<![endif]-->

Поскольку его комментарий игнорируется браузерами... за исключением IE, которая загружает его, если тест if соответствует текущему браузеру.

-121--2058108-

если stripos ($ _ SERVER ['HTTP _ USER _ AGENT'], "mozilla")! = false)

Это не полезный тест, почти каждый браузер идентифицирует себя как Mozilla.

является $ _ SERVER ['HTTP _ USER _ AGENT'] надежным способом?

Нет.

Вместо этого следует выбрать функцию get_browser?

Нет.

Поиск в браузере на стороне сервера - проигрышная игра. Помимо всех проблем, связанных с попыткой синтаксического анализа строки UA, браузеры, которые лежат, неясные браузеры и возможность того, что заголовка там нет, при возврате другого содержимого страницы для другого браузера необходимо установить заголовок Vary , включающий User-Agent , в противном случае кэширование прокси-серверов может вернуть неверную версию страницы в неправильный браузер.

Но при добавлении Vary: User-Agent поврежденный код кэширования IE путается и каждый раз загружает страницу. Так ты не можешь победить.

Если вы должны искать браузер, то это место на стороне клиента, используя JavaScript и, в частности, в случае IE, условные комментарии. Повезло, что это IE, который поддерживает условные комментарии, так как это один браузер, для которого часто нужны обходные пути. (Наиболее распространенную стратегию см. в ответе scunliffe.)

3
ответ дан 27 November 2019 в 20:00
поделиться

Я думаю, что полагаться на userAgent немного слабо, поскольку он может (и часто бывает) подделывать.

Если вы хотите использовать CSS только для IE, используйте условный комментарий.

<link type="text/css" rel="stylesheet" href="styles.css"/><!--for all-->
<!--[if IE]>
  <link type="text/css" rel="stylesheet" href="ie_styles.css"/>
<![endif]-->

или если вам просто нужен один для IE6:

<!--[if IE 6]>
  <link type="text/css" rel="stylesheet" href="ie6_styles.css"/>
<![endif]-->

Поскольку это комментарий, он игнорируется браузерами ... кроме IE, который загружает его, если тест if совпадает с текущим браузером.

1
ответ дан 27 November 2019 в 20:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: