2011-01-27 3 views
3

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

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

+8

Вы должны принять ответы на свои вопросы. – SLaks

+0

Ummm. Я принял ответы на предыдущие вопросы. Как вы узнаете, что я сделал или не сделал? – Lance

+0

Любой, кто знает, как изменить свой пользовательский агент, не будет использовать IE6 или 7 – Ross

ответ

4

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

Браузеры могут лгать об их личности и часто делать.

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

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

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

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

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

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

-1

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

+4

Неверное изображение. Вы также можете обманывать свой агент для JavaScript. – Yahel

+0

Вы имеете в виду такие переменные, как navigator.appName и navigator.appVersion, подделанные? – Merijn

+2

Пользовательский агент подделан. Другие методы Javascript более надежны (особенно некоторые, которые полагаются на определенные функции и/или ошибки браузера), но я все равно не буду использовать их, если не будет абсолютно никакого другого способа. Обнаружение функции каждый раз выигрывает при обнаружении браузера. – Spudley

0

(. Глупый ответ оповещения)

Если вы заинтересованы только в обнаружении 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 " Но есть много способов разбить это."

1

Лучший способ обнаружить браузер пользователя с PHP является не проверки браузера пользователя с PHP.

Вы упомянули, что IE л 8 отстой для CSS (и это то, что каждый веб-DEV могут договориться), лучший способ сообщить пользователю, что их браузер слишком старое с условным комментарием в 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 использовать ваш wobsite, если он не работает, просто сообщите им, что это их собственная ошибка для использования crummy браузера.

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

<!--[if IE lt 8]> 
<script type="text/javascript">document.cookie='isie=oh-crud-you-use-ie';</script> 
<![endif]--> 
+0

Что делать, если только IE не определенную версию? –

+0

@Xcoder, '' – zzzzBov

0

Лучшим способом обнаружения браузера является использование класса PHP приведен ниже. Я создал это для своего сайта год назад. Он работает с хромом, 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

Пользователь может подделать свой/его Пользовательский агент ... – candlejack

Смежные вопросы