PHP: если internet explorer 6, 7, 8 или 9



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



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



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



спасибо



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

519   17  

17 ответов:

Это то, что я в конечном итоге с помощью вариации, которая проверяет 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
}

версия, которая будет продолжать работать как с 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
  }
}

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

вы можете проверить переменную сервера HTTP_USER_AGENT. Агент пользователя перенесенный т. е. содержит MSIE

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

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

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

см. Также этот вопрос.

Я делаю это

$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
}

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

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

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

вот небольшая функция php, которую я написал, которая использует регулярное выражение непосредственно из предложенного MSFT кода JavaScript sniffing из этой статьи: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;

}

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

$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}

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

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

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

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

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

вы можете использовать что-то вроде этого для разных сообщений или 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]-->

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

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

Если у вас есть 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'])

но все равно полезно - и работает с 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;
}

Так что эта функция возвращает: 'сафари' или 'Firefox или хром', или 'т. е. в IE8', 'т. е. ие9', 'т. е. в IE10', 'т. е. в IE11'.

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

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

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

Comments

    Ничего не найдено.