Подтвердить что ты не робот

PHP: если Internet Explorer 6, 7, 8 или 9

Я хочу сделать условное выражение в PHP для разных версий Internet Explorer в соответствии с:

if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...

Я видел много вариаций на подобном коде, но искал что-то супер простое, что очень легко кодировать, чтобы делать какие-то простые if и else и делать разные вещи.

Спасибо

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

4b9b3361

Ответ 1

Это то, что я в конечном итоге использовал в качестве варианта, который проверяет IE8 и ниже:

if (preg_match('/MSIE\s(?P<v>\d+)/i', @$_SERVER['HTTP_USER_AGENT'], $B) && $B['v'] <= 8) {
    // Browsers IE 8 and below
} else {
    // All other browsers
}

Ответ 2

Версия, которая будет продолжать работать как с IE10, так и с IE11:

preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if(count($matches)<2){
  preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
}

if (count($matches)>1){
  //Then we're using IE
  $version = $matches[1];

  switch(true){
    case ($version<=8):
      //IE 8 or under!
      break;

    case ($version==9 || $version==10):
      //IE9 & IE10!
      break;

    case ($version==11):
      //Version 11!
      break;

    default:
      //You get the idea
  }
}

Ответ 3

Вот отличный ресурс для обнаружения браузеров в php: http://php.net/manual/en/function.get-browser.php

Вот один из примеров, который кажется самым простым:

<?php
function get_user_browser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = '';
    if(preg_match('/MSIE/i',$u_agent))
    {
        $ub = "ie";
    }
    elseif(preg_match('/Firefox/i',$u_agent))
    {
        $ub = "firefox";
    }
    elseif(preg_match('/Safari/i',$u_agent))
    {
        $ub = "safari";
    }
    elseif(preg_match('/Chrome/i',$u_agent))
    {
        $ub = "chrome";
    }
    elseif(preg_match('/Flock/i',$u_agent))
    {
        $ub = "flock";
    }
    elseif(preg_match('/Opera/i',$u_agent))
    {
        $ub = "opera";
    }

    return $ub;
}
?>

Затем в вашем коде вы могли бы сказать что-то вроде

$browser = get_user_browser();
if($browser == "ie"){
    //do stuff
}

Ответ 4

Вы можете проверить переменную сервера HTTP_USER_AGENT. Пользовательский агент, переданный IE, содержит MSIE

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }

Для конкретных версий вы можете расширить свое состояние

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }

Также см. этот связанный вопрос.

Ответ 5

Я делаю это

$u = $_SERVER['HTTP_USER_AGENT'];

$isIE7  = (bool)preg_match('/msie 7./i', $u );
$isIE8  = (bool)preg_match('/msie 8./i', $u );
$isIE9  = (bool)preg_match('/msie 9./i', $u );
$isIE10 = (bool)preg_match('/msie 10./i', $u );

if ($isIE9) {
    //do ie9 stuff
}

Ответ 6

PHP имеет функцию get_browser(), которая вернет объект (или массив, если вы так захотите), с подробностями о браузере пользователей и что он может сделать.

Простой взгляд дал мне этот код:

$browser = get_browser( null, true );
if( $browser['name'] == "Firefox" )
    if( $browser['majorversion'] == 4 )
        echo "You're using Firefox version 4!";

Это не является верным способом (так как он читает из HTTP_USER_AGENT, который может быть подделан, и иногда он может быть неправильно проанализирован php), но это самый простой, который вы можете найти, насколько я знаю.

Ответ 7

Вы также можете посмотреть в PHP get_browser(); http://php.net/manual/en/function.get-browser.php

Возможно, вы найдете его полезным для большего количества функций.

Ответ 8

Вот небольшая функция php, которую я написал, которая использует регулярное выражение непосредственно из предложенного MSFT кода для нюхания javascript из этой статьи: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx

/**
* Returns the version of Internet Explorer or false
*/
function isIE(){

    $isIE = preg_match("/MSIE ([0-9]{1,}[\.0-9]{0,})/",$_SERVER['HTTP_USER_AGENT'],$version);
    if($isIE){
        return $version[1];
    }
    return $isIE;

}

Ответ 9

if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}

Ответ 10

Проверка только для MSIE недостаточна для обнаружения IE. Вам также нужен "Trident", который используется только в IE11. Итак, вот мое решение, в котором работали версии с 8 по 11.

$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);

Ответ 11

Вы можете сделать это, разобрав заголовок user-agent:

http://php.about.com/od/learnphp/p/http_user_agent.htm

Будьте осторожны, что это не очень надежно и может быть тривиально подделано.

Ответ 12

'HTTP_USER_AGENT'     Содержимое заголовка User-Agent: из текущего запроса, если таковой имеется. Это строка, обозначающая пользовательский агент, который обращается к странице. Типичный пример: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Помимо всего прочего, вы можете использовать это значение с помощью get_browser(), чтобы настроить выход страницы на возможности пользовательского агента.

Итак, я предполагаю, что вы сможете получить имя/идентификатор браузера из переменной $_SERVER [ "HTTP_USER_AGENT" ].

Ответ 13

Вы можете использовать что-то вроде этого для разных сообщений или div/css

<!--[if IE 6]>
<style type="text/css">
div.ie6 { display:block; }
</style>
<![endif]-->

<!--[if IE 7]>
<style type="text/css">
div.ie7 { display:block; }
</style>
<![endif]-->

<!--[if IE 8]>
<style type="text/css">
div.ie8 { display:block; }
</style>
<![endif]-->

<!--[if IE 9]>
message1
<![endif]-->

<!--[if !IE 6]>
message2
<![endif]-->

<!--[if lt IE 8]>
message3
<![endif]-->

ИЛИ использовать другой div css

<!--[if lte IE 8]>
<style type="text/css">
div.lteie8 { display:block; }
</style>
<![endif]-->

<!--[if gt IE 6]>
<style type="text/css">
div.gtie6 { display:block; }
</style>
<![endif]-->

<!--[if gte IE 6]>
<style type="text/css">
div.gteie6 { display:block; }
</style>
<![endif]-->

Ответ 14

но все же полезно - и работает с IE11! вот еще один короткий способ получить общие браузеры, возвращенные для класса css:

function get_browser()
{
    $browser = '';
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (preg_match('~(?:msie ?|trident.+?; ?rv: ?)(\d+)~', $ua, $matches)) $browser = 'ie ie'.$matches[1];
    elseif (preg_match('~(safari|chrome|firefox)~', $ua, $matches)) $browser = $matches[1];

    return $browser;
}

Таким образом, эта функция возвращает: "safari" или "firefox" или "chrome", или "ie ie8", т.е. ie9 ', т.е. ie10', 'ie ie11'.

надеюсь, что это поможет

Ответ 15

Обратите внимание на случай в "Trident":

if (isset($_SERVER['HTTP_USER_AGENT']) &&
    ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) {   
     // IE is here :-(
    }

Ответ 16

если у вас есть Internet Explorer 11, и он работает на ПК с сенсорным экраном, вы должны использовать:   preg_match ('/Trident/7.0; Touch; rv: 11.0/', $_SERVER ['HTTP_USER_AGENT']) вместо:   preg_match ('/Trident/7.0; rv: 11.0/', $_SERVER ['HTTP_USER_AGENT'])

Ответ 17

Трехдневный подход будет лучше. Вот быстрая функция проверки IE 8.

<?php
function is_IE8(){
   if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){
       return TRUE;
   };
   return FALSE; 
} 
?>