我可以用PHP检测IE6吗?

PHL*_*LAK 48 php cross-browser internet-explorer-6

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

Jer*_*ten 64

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

$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);
Run Code Online (Sandbox Code Playgroud)

这基于此用户代理信息.

  • 这通常也会匹配Opera,因为Opera经常在其用户代理字符串中添加"MSIE 6.0". (8认同)
  • Opera的最新版本(默认情况下)在用户代理字符串中具有MSIE 6.0 (3认同)
  • 在我的情况下,这对所有MSIE浏览器都是误报,因为它们都列出了"MSIE 6.0兼容",即使它们的版本实际上更高. (2认同)
  • @thomasrutter - 只需将`&&!strpos($ _ SERVER ['HTTP_USER_AGENT'],'Opera')添加到`if`条件 (2认同)

Óla*_*age 28

你可以用这种方式用HTML检测IE6

<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

这是一个关于如何在PHP Way Back Machine中完成的链接,但我在解析$_SERVER["HTTP_USER_AGENT"]IE6时遇到了很多误报

  • 这有时可能很有用,但实际上并不是问题的答案.它询问如何使用PHP这样做.用户代理可能是IE,但它可能不是呈现HTML. (2认同)

tho*_*ter 15

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

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51
Run Code Online (Sandbox Code Playgroud)

这会影响Opera 5到9甚至Opera 10的所有版本,并且可以在Opera中打开或关闭. 看到这个页面.

我见过的常见方法是测试"MSIE"和"Opera".例如,

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

  • strpos()将在这里更快地完成工作. (3认同)
  • $ ua = $ _SERVER ['HTTP_USER_AGENT']; if(preg_match('/\bmsie [56]\./ i',$ ua)&&!preg_match('/\b(opera | msie [789])/ i',$ ua)){echo'IE 5或6' ; } (2认同)

mar*_*rix 12

PHLAK ......

我觉得这个好多了:P

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


bro*_*oox 6

像其他人一样说,有误报的只是检查用户代理...那么,为什么不使用这两种,用户代理检查和条件注释.

例如...

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

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