PHP:如果Internet Explorer 6,7,8或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服务器variables。 由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 } 

PHP有一个名为get_browser()的函数,它将返回一个对象(或者你select的数组),并提供关于用户浏览器的细节以及它可以做什么。

一个简单的通过给我这个代码:

 $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

也许你会发现它有用的更多的function。

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

下面是我写的一个小函数,它直接从MSFT的build议JavaScript嗅探代码从这篇文章中使用正则expression式: 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。 所以这里是我的解决scheme,工作版本8至11。

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

你可以通过parsinguser-agent头来做到这一点:

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

要小心,这是不是很可靠,可以微不足道的欺骗。

“HTTP_USER_AGENT”当前请求中User-Agent:头的内容(如果有的话)。 这是表示正在访问该页面的用户代理的string。 一个典型的例子是:Mozilla / 4.5 [en](X11; U; Linux 2.2.9 i586)。 除此之外,您可以在get_browser()中使用此值来将页面的输出定制为用户代理的function。

所以我假设你可以从$ _SERVER [“HTTP_USER_AGENT”]variables中获得浏览器名称/ 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 ie ie8,ie ie9,ie ie10,ie ie11。

希望能帮助到你

注意“三叉戟”中的情况:

 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,并且它通过触摸屏PC运行,则必须使用: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的快速function。

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