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

87

我想在 PHP 中按照以下方式对不同版本的Internet Explorer进行条件判断:

if($browser == ie6){ //执行这个代码} elseif($browser == ie7) { //执行这个代码 } elseif...

我已经看到过许多类似代码的变体,但是我正在寻找一些非常简单易懂的代码来执行一些简单的 if 和 else,从而执行不同的操作。

谢谢

编辑:我需要展示一些不同的消息给用户,因此 CSS 的条件语句等都不太适用。


4
你是否希望为不同的CSS提供服务?如果是这样,请考虑使用条件注释。这样会更方便。 - Pekka
1
显然,IE10不支持条件语句。 - CharlieM
17个回答

2
您可以使用类似以下的代码来实现不同的消息或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]-->

2

请记住,“用户代理”可以被伪造。 - drudge
7
如果用户想欺骗他们的“用户代理”,他们希望检索页面内容,就好像这确实是他们的用户代理一样。结果就是他们所请求的内容。这里没有问题。 - Lightness Races in Orbit

2

'HTTP_USER_AGENT' 如果有当前请求的User-Agent标头,则为User-Agent标头的内容。这是一个字符串,表示正在访问页面的用户代理。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。除其他外,您可以使用此值与get_browser()一起使用,以使您的页面输出适应用户代理的功能。

因此,我假设您将能够从$_SERVER ["HTTP_USER_AGENT"]变量中获取浏览器名称/ ID。


1
但仍然有用 - 并且可以在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 ie9'、'ie ie10'、'ie ie11'。
希望能对你有所帮助。

0

注意'Trident'中的大小写:

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

0

如果您使用的是运行在触摸屏电脑上的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'])


-1

采用三角分布方法会更好。 这是一个快速检查IE 8的函数。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接