我想在PHP中针对Internet Explorer的不同版本执行以下条件:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
我在相似的代码上看到了许多变体,但是正在寻找一种超级简单的东西,非常容易编写一些if和else并做不同的事情。
谢谢
编辑:我需要它向用户显示一些不同的消息,所以CSS条件等都是不好的。
我想在PHP中针对Internet Explorer的不同版本执行以下条件:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
我在相似的代码上看到了许多变体,但是正在寻找一种超级简单的东西,非常容易编写一些if和else并做不同的事情。
谢谢
编辑:我需要它向用户显示一些不同的消息,所以CSS条件等都是不好的。
Answers:
这是我最终使用的变体,它检查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
}
'/(?i)msie [1-8]\./'
可以继续与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
}
}
Trident\/\d{1,2}.\d{1,2};(.*)rv:([0-9]*)
,并且$version = $matches[1];
应更改为$version = ($matches[2] == 11)?$matches[2]:$matches[1];
。您可以在此处查看regex的示例:regexr.com/3fb4k。
您可以检查HTTP_USER_AGENT服务器变量。IE传输的用户代理包含MSIE
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
对于特定版本,您可以延长条件
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
另请参阅此相关问题。
preg_match('/Trident\/7.0; rv:11.0/', $_SERVER['HTTP_USER_AGENT'])
这是检测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
}
我做这个
$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分析为错误),但据我所知,这是最简单的方法。
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}
您也可以查看PHP的get_browser();
http://php.net/manual/en/function.get-browser.php
也许您会发现它对更多功能很有用。
这是我写的一个小php函数,直接从MSFT建议的javascript嗅探代码中使用正则表达式,该代码来自本文:http : //msdn.microsoft.com/zh-cn/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中使用的“ Trident”。所以这是我的解决方案,适用于版本8至11。
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
User Agent
可以伪造。
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]-->
或使用不同的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 ie9”,“ ie ie10”,“ ie ie11”。
希望能帮助到你
如果您具有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'])