Какой лучший способ обнаружить браузер с помощью php? - PullRequest
3 голосов
/ 27 января 2011

Может кто-нибудь сказать мне лучший способ обнаружить браузер с помощью php?IE 6 и 7 ужасны, когда дело доходит до полной совместимости браузера с CSS, поэтому мой сайт не будет поддерживать и версию IE старше 8.

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

Ответы [ 5 ]

4 голосов
/ 27 января 2011

Вы не можете достоверно определить, что такое браузер.Это так просто.

Браузеры могут лгать о своей идентичности, и часто делают.

Некоторые прокси и продукты безопасности отбирают данные пользовательского агента из запроса, поэтому ваш PHP-код можетпросто получите пустую строку.

В Javascript у вас может быть немного больше удачи, хотя это все еще проблематично, но на уровне PHP вы никогда не можете быть уверены.

Моим первым предложением было быотказаться от поддержки IE6, если только ваша демографическая группа не является действительно упрямым меньшинством.Статистика использования IE6 в большинстве развитых стран сейчас ниже 2,5%.Одно это избавит вас от значительной части ваших проблем с CSS.IE7 по-прежнему не очень хорош, но он на милю лучше, чем IE6, и его можно поддерживать, придерживаясь современных стандартов.

Мое второе предложение - не пытаться понизить рейтинг вашего сайта для этих браузеров, попробуйтеобновите браузер.

Существует ряд очень хороших хаков и инструментов, которые позволят вам улучшить поддержку CSS в более старых версиях IE.Я рекомендую вам попробовать следующее:

И, конечно же, вездесущий JQuery .

1 голос
/ 27 января 2011

Лучший способ обнаружить браузер пользователя с помощью PHP - , а не проверить браузер пользователя с помощью PHP.

Вы упомянули, что IE lt 8 отстой для CSS (и с этим может согласиться каждый веб-разработчик), лучший способ сообщить пользователю, что его браузер слишком стар, - это условный комментарий в HTML:

<head>
...
<!--[if IE lt 8]>
  <link rel="stylesheet" type="text/css" href="ie-styles.css" />
<![endif]-->
</head>
<body>
<!--[if IE lt 8]>
  <div id="ie-only">
    <p>Please get a <a href="http://www.abetterbrowser.org/">better browser</a>.</p>
  </div>
<![endif]-->
...
</body>

Код, который я написал, показывает две вещи, которые вы можете сделать: во-первых, он показывает, что вы можете установить таблицу стилей только для IE, а во-вторых, он показывает, что вы можете установить IE только для фрагментов HTML.

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

Это также позволит вам установить cookie для последующих вызовов PHP:

<!--[if IE lt 8]>
<script type="text/javascript">document.cookie='isie=oh-crud-you-use-ie';</script>
<![endif]-->
0 голосов
/ 14 июля 2012

Лучший способ обнаружить браузер - использовать класс php, указанный ниже.Я создал это для моего сайта год назад.Работает с Chrome, Firefox, Opera и Internet Explorer.

 <?php 
    class Browser { 
        public static function detect() { 
            $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); 
            if ((substr($_SERVER['HTTP_USER_AGENT'],0,6)=="Opera/") || (strpos($userAgent,'opera')) != false ){ 
                $name = 'opera';
            } 
            elseif ((strpos($userAgent,'chrome')) != false) { 
                $name = 'chrome'; 
            } 
            elseif ((strpos($userAgent,'safari')) != false && (strpos($userAgent,'chrome')) == false && (strpos($userAgent,'chrome')) == false){ 
                $name = 'safari'; 
            } 
            elseif (preg_match('/msie/', $userAgent)) { 
                $name = 'msie'; 
            } 
            elseif ((strpos($userAgent,'firefox')) != false) { 
                $name = 'firefox'; 
            } 
            else { 
                $name = 'unrecognized'; 
            } 
            if (preg_match('/.+(?:me|ox|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches) && $browser['name']=='safari' ) { 
                $version = $matches[1]; 
            }
            if (preg_match('/.+(?:me|ox|it|on|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches) && $browser['name']!='safari' ) { 
                $version = $matches[1]; 
            }
            else { 
                $version = 'unknown'; 
            } 

            return array( 
                'name'      => $name, 
                'version'   => $version,
            ); 
        } 
    } 
    $browser = Browser::detect(); 
    echo 'You browser is '.$browser['name'].' version '.$browser['version']; 
    echo "<br />";
    ?> 
0 голосов
/ 27 января 2011

( Глупый ответ. )

Если вы заинтересованы только в обнаружении IE6 и 7, вы можете создать промежуточную страницу:

<form action="wherever.php" method="post">
    <!--[if lt IE 8]>
    <input type="hidden" name="too_old" value="1" />
    <![endif]-->
</form>
<script>
document.getElementsByTagName('form')[0].submit();
</script>

Этобудет вся страница, как есть.(Вы можете добавить некоторые вещи для людей, у которых не включен JS, если хотите.)

Затем, когда вы перейдете на следующую страницу, вы можете получить следующий PHP:

$location = empty($_GET['too_old']) ? 'good_page.wherever' : 'bad_page.whatever';
header('Location: '.$location);

inb4 "Но есть много способов сломать это."

0 голосов
/ 27 января 2011

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

...