PHP: если Internet Explorer 6, 7, 8 или 9 - PullRequest
84 голосов
/ 14 марта 2011

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

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

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

Спасибо

РЕДАКТИРОВАТЬ: мне нужно, чтобы это показывало пользователям несколько разных сообщений, поэтому условия CSS и т. Д. Не годятся.

Ответы [ 17 ]

130 голосов
/ 14 марта 2011

Это то, что я в конечном итоге использовал вариант, который проверяет для 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
}
83 голосов
/ 31 июля 2012

Версия, которая будет продолжать работать как с 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
  }
}
16 голосов
/ 14 марта 2011

Вот отличный ресурс для обнаружения браузеров в 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
}
14 голосов
/ 14 марта 2011

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

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

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

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

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

10 голосов
/ 31 июля 2013

Я делаю это

$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
}
5 голосов
/ 20 октября 2015
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}
5 голосов
/ 14 марта 2011

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), но это самый простой, который вы можете найти, насколько я знаю.

4 голосов
/ 22 февраля 2014

Вот небольшая написанная мной функция php, которая использует регулярное выражение непосредственно из предложенного MSFT кода сниффинга JavaScript из этой статьи:

/**
* 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;

}
4 голосов
/ 14 марта 2011

Вы также можете заглянуть в PHP get_browser(); http://php.net/manual/en/function.get-browser.php

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

3 голосов
/ 23 марта 2015

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

$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...