繁体   English   中英

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

[英]PHP: If internet explorer 6, 7, 8 , or 9

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

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

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

谢谢

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

这是我最终使用的变体,它检查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服务器变量。 由IE传输的用户代理包含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
}
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}

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函数,直接使用来自本文的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;

}

您还可以查看PHP的get_browser(); http://php.net/manual/en/function.get-browser.php

也许你会发现它对更多功能很有用。

仅检查MSIE不足以检测IE。 你还需要“Trident”,它只在IE11中使用。 所以这是我的解决方案,它适用于版本8到11。

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

您可以通过解析用户代理标头来完成此操作:

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”]变量中获取浏览器名称/ ID。

您可以使用类似的内容来处理不同的消息或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]-->

或者使用不同的css div

<!--[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]-->

但仍然有用 - 并与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','ie ie'','ie10','ie11'。

希望能帮助到你

请注意'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'])

基于tridend的方法会更好。 这是一个检查IE 8的快速功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM