我可以用PHP检测IE6吗?

时间:2009-03-23 00:24:26

标签: php internet-explorer-6 cross-browser

有没有办法使用PHP来检测是否正在使用IE6加载页面?

17 个答案:

答案 0 :(得分:64)

尝试检查'MSIE 6.'的用户代理。

$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);

这基于this user agent information

答案 1 :(得分:28)

您可以通过HTML检测IE6

<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->

Here's a link on how it's done in PHP Way Back Machine 但我在解析IE6的$_SERVER["HTTP_USER_AGENT"]时看到了很多误报

答案 2 :(得分:15)

此页面上的许多基于用户代理的答案都不太可靠,因为Opera经常使用包含“MSIE 6.0”的用户代理字符串来标识自己,例如:

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51

这会影响Opera 5到9甚至Opera 10的所有版本,并且可以在Opera中打开或关闭。 See this page

我见过的常见方法是测试“MSIE”和“Opera”。例如,

if (preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua))
  echo "We have IE6!";

答案 3 :(得分:12)

好PHLAK ......

我觉得这个好多了:P

  if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) {
   // if IE<=6
  } else {
   //if IE>6
  }

答案 4 :(得分:9)

您可以将get_browserupdated browscap.ini file一起使用。

答案 5 :(得分:6)

与其他人一样,只需检查用户代理就可以 是误报...所以为什么不使用两者,用户代理检查和条件注释。

例如......

<? if (preg_match('/\bmsie 6/i', $_SERVER['HTTP_USER_AGENT']) { ?>
  <!--[if IE 6]>
    // ie6 only stuff here
  <![endif]-->
<? } ?>

这样您就不会将这些不必要的代码发送回大多数浏览器......但如果出现误报,仍然是安全的。

答案 6 :(得分:3)

可以,使用HTTP User-Agent标头,但我强烈建议尽可能不这样做。 User-Agent标头非常难以准确地解析,并且通过简单的字符串匹配倾向于误报 - 甚至忽略了假装为其他浏览器的浏览器的问题。例如,Jeremy的“MSIE 6”字符串将匹配IE Mobile,它与IE6非常不同,您通常不想将它们混为一谈。

另外,当您向不同的浏览器发送不同的HTML时,您必须使用“Vary”标头(这会降低缓存效率),以避免缓存将错误的页面发送到不同的浏览器。

所以,如果你能找到另一个地方做浏览器差异化,这绝对是最好的。 Ólafur的条件注释方法通常是更改JavaScript和HTML标记/ CSS链接的最简单方法。

答案 7 :(得分:2)

if(substr($_SERVER['HTTP_USER_AGENT'],0,34)=="Mozilla/4.0 (compatible; MSIE 6.0;") echo "I am stupid IE6";

IE 6始终以“Mozilla / 4.0(兼容; MSIE 6.0;”)开头 IE 7,8中间有“MSIE 6”......

答案 8 :(得分:2)

您可以将它用于许多浏览器,但这很耗时,有时也会出现误报......

function do_stylesheet_link() {
// Picks up appropriate css file depending on the user-agent

//  if ( stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox') ) {
//echo '<link rel="stylesheet" href="css/firefox.css" type="text/css" />'; }    

//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome') ) {
//echo '<link rel="stylesheet" href="css/chrome.css" type="text/css" />'; }

//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Safari') ) {
//echo '<link rel="stylesheet" href="css/safari.css" type="text/css" />'; }

//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Opera') ) {
//echo '<link rel="stylesheet" href="css/opera.css" type="text/css" />'; }

    if ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') )  {
echo '<link rel="stylesheet" href="css/ie6.css" type="text/css" />'; }

elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.') ) {
echo '<link rel="stylesheet" href="css/ie7.css" type="text/css" />'; }

elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.') ) {
echo '<link rel="stylesheet" href="css/ie8.css" type="text/css" />'; }

else {
echo '<link rel="stylesheet" href="css/style.css" type="text/css" />';
}

}

答案 9 :(得分:1)

function isIE($versions=array()) {
    if (!empty($versions))
        $versions = '('.implode('|',$versions).')';
    else
        $versions = '1?\d';
    $ua = $_SERVER['HTTP_USER_AGENT'];
    $is_not_opera = false===stripos($ua, 'opera');
    return $is_not_opera && preg_match('/\bmsie '.$versions.'\./i', $ua);
}

使用:

$is_ie = isIE(); //Any version
$is_ie_7 = isIE(array(7)); //IE 7
$is_old_id = isIE(array(6,7));//IE 7 and 8

答案 10 :(得分:1)

更简单:

if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0")) {
    // IE6? Aren't you out of fashion yet?
}

答案 11 :(得分:1)

列出的方法通常会标记带有某些插件的浏览器(例如MathPlayer;以及一些恶意软件工具栏)。

我发现一个更可靠的方法是:

if( preg_match('/^Mozilla\/4\.0 \(compatible; MSIE 6/', $_SERVER['HTTP_USER_AGENT']) != 0 )

答案 12 :(得分:1)

谢谢大家,我最终创建了以下函数并根据需要调用它:

// IE6 Check
function isIE() {
  $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  if (ereg("msie 6.0", $userAgent)) {
    return true;
  } else {
    return false;
  }
}

答案 13 :(得分:0)

非常有帮助的帖子。我用它来隐藏IE6的<?xml>声明。原来IE6只检查文档的第一行是否有doctype嗅探,这意味着如果存在<?xml>字符串,IE6将以怪癖模式呈现,而不管<?xml>声明后面的doctype

我不确定它是否至关重要包括歌剧检查,但无论如何都包括它。

//check if IE 6 or less
$not_lte_ie6 = true;
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($ua,'msie') !== FALSE) {
    if(strpos($ua,'opera') === FALSE) {
        if(preg_match('/(?i)msie [1-6]/',$ua)) $not_lte_ie6 = false;
    }
}
if ($not_lte_ie6)
    echo "<?xml version='1.0' encoding='UTF-8'?>\n";

答案 14 :(得分:0)

function isOldIE() {
    // don't support IE6 or below
    return preg_match('/MSIE [1-6]/', $_SERVER['HTTP_USER_AGENT']);
}

答案 15 :(得分:-1)

注意IE8还指定它的用户代理字符串是IE6兼容的。

答案 16 :(得分:-1)

函数是preg_match()而不是preg(),但很好!