PHP:如果是Internet Explorer 6,7,8或9

Cam*_*ron 84 php browser

我想在PHP中为不同版本的Internet Explorer做一个有条件的条件:

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

我已经看到了类似代码的许多变化,但是寻找一些非常简单的东西,很容易编写代码来做一些简单的if和else并做不同的事情.

谢谢

编辑:我需要这个向用户显示一些不同的消息,所以CSS条件等不是很好.

Cam*_*ron 130

这是我最终使用的变体,它检查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
}
Run Code Online (Sandbox Code Playgroud)

  • 此模式将Internet Explorer 10识别为Internet Explorer 1. (75认同)
  • 只需将其更改为''/(?i)msie [2-8] /'`.你真的需要检查[ie 1](http://en.wikipedia.org/wiki/Internet_Explorer_1)吗?它于1995年发布,几个月后被ie2取代. (45认同)
  • 我改为[4-8].IE更新越来越频繁,我真的想确保在我正在处理的Web应用程序的生命周期中不必进行类似的更改(因为它只有3年的使用寿命).如果有人使用IE 5或更低版本浏览网页,他们比查看我的网络应用程序有更多问题. (8认同)
  • 我认为Opera的某些版本会与之匹配,但可以通过检查'Opera'来过滤掉它们. (2认同)
  • 如果你只是添加一个句点,它将检查较低的数字版本,而不检查版本10,20等.`'/(?i)msie [1-8]\./'` (2认同)

Dou*_*oug 84

一个将继续与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
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么你使用switch语句时看起来像if/then会更合适,但这很有用.显然,你是唯一一个认为OP需要单独版本支持的人. (2认同)

Mic*_*per 16

这是在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;
}
?>
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中你可以说类似的东西

$browser = get_user_browser();
if($browser == "ie"){
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)


Daf*_*aff 15

您可以检查HTTP_USER_AGENT服务器变量.由IE传输的用户代理包含MSIE

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
Run Code Online (Sandbox Code Playgroud)

对于特定版本,您可以扩展您的条件

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
Run Code Online (Sandbox Code Playgroud)

另请参阅此相关问题.


Vin*_*owe 10

我这样做

$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
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*e S 5

PHP有一个名为get_browser()的函数,它将返回一个对象(如果您愿意,还会返回数组),其中包含有关用户浏览器及其功能的详细信息.

一个简单的外观给了我这段代码:

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

这不是一种万无一失的方式(因为它从HTTP_USER_AGENT中读取,可能是欺骗性的,有时会被php分析错误),但据我所知,它是最容易找到的.

  • 需要服务器端配置才能工作.我不确定产品在不同服务器上运行的可靠性如何 (2认同)

xso*_*sor 5

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