Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以用PHP检测IE6吗?_Php_Internet Explorer 6_Cross Browser - Fatal编程技术网

我可以用PHP检测IE6吗?

我可以用PHP检测IE6吗?,php,internet-explorer-6,cross-browser,Php,Internet Explorer 6,Cross Browser,有没有一种方法可以使用PHP来检测页面是否正在使用IE6加载?您可以通过这种方法检测带有HTML的IE6 <!--[if IE 6]> // ie6 only stuff here <![endif]--> 但是我在分析IE6的$\u服务器[“HTTP\u USER\u AGENT”]时看到了许多误报,请尝试检查他们的用户代理是否有'MSIE 6. $using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.'

有没有一种方法可以使用PHP来检测页面是否正在使用IE6加载?

您可以通过这种方法检测带有HTML的IE6

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


但是我在分析IE6的
$\u服务器[“HTTP\u USER\u AGENT”]
时看到了许多误报,请尝试检查他们的用户代理是否有
'MSIE 6.

$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);
这是基于。

您可以与一起使用。

您可以使用HTTP用户代理头,但我强烈建议尽可能不要这样做。用户代理标头很难准确解析,并且通过简单的字符串匹配容易出现误报 — 甚至忽略了假装是其他浏览器的浏览器的问题。例如,Jeremy的“MSIE 6.”字符串将匹配IE Mobile,这与IE6非常不同,因此您通常不想将它们混为一谈

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


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

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

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

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

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51
这会影响Opera 5到9的所有版本,甚至Opera 10,并且可以在Opera内打开或关闭

我见过的一种常见方法是测试“MSIE”和“Opera”。比如说,

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

我认为这个更好:p

  if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) {
   // if IE<=6
  } else {
   //if IE>6
  }
if(preg_match('/msie[2-6]/i',$_服务器['HTTP_用户\u代理])){
//如果IE6
}

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

注意IE8还指定其用户代理字符串与IE6兼容。

非常有用的线程。我用它来隐藏IE6的
声明。原来IE6只检查文档的第一行是否存在doctype嗅探,这意味着如果存在
字符串,IE6将以quirks模式呈现,而不管
声明后面的doctype是什么

我不确定是否包括opera检查是至关重要的,但我已经包括了它

//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";
//检查IE是否小于等于6
$not_lte_ie6=真;
$ua=strtolower($\服务器['HTTP\用户\代理]);
if(strpos($ua,'msie')!==FALSE){
if(strpos($ua,'opera')==FALSE){
如果(preg_match('/(?i)msie[1-6]/',$ua))$not_lte_ie6=false;
}
}
如果($not\u lte\u ie6)
回音“\n”;

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

我发现更可靠的方法是:

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

正如其他人所说,只要检查用户代理,就会出现误报。。。那么为什么不同时使用、用户代理检查和条件注释呢

例如

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

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

您可以在许多浏览器上使用它,但它很耗时,有时还会出现误报

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" />';
}
函数do\u样式表\u link(){
//根据用户代理选择适当的css文件
//if(stristr($_SERVER['HTTP\u USER\u AGENT'],'Firefox')){
//回音“;}
//elseif(stristr($_SERVER['HTTP\u USER\u AGENT','Chrome')){
//回音“;}
//elseif(stristr($\u服务器['HTTP\u用户\u代理'],'Safari')){
//回音“;}
//elseif(stristr($\u服务器['HTTP\u用户\u代理],'Opera')){
//回音“;}
if(stristr($_SERVER['HTTP\u USER\u AGENT','MSIE 6')){
回音“;}
elseif(stristr($_服务器['HTTP_用户_代理],'MSIE 7')){
回音“;}
elseif(stristr($_服务器['HTTP_用户_代理],'MSIE 8')){
回音“;}
否则{
回声';
}
}
if(substr($\u SERVER['HTTP\u USER\u AGENT',0,34)=“Mozilla/4.0(兼容;MSIE 6.0;”)
回应“我是傻瓜IE6”;

IE 6总是以“Mozilla/4.0(兼容;MSIE 6.0 IE 7、8中间有“MSIE 6”…

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

你想这么做有什么特别的原因吗?哈哈,让我们杀了ie6吧,因为它的开发既旧又耗时,有时你只想将它们重定向到你网站的一个糟糕的旧版本。我想在我的网站上添加一条消息,让ie6用户告诉他们已经更新了他们的垃圾。这听起来很有趣,我会尝试一下。这通常会让我感到惊讶tch Opera也是如此,因为Opera经常在其用户代理字符串中添加“MSIE 6.0”。Opera的最新版本(默认情况下)在用户代理字符串中没有MSIE 6.0。在我的情况下,这对于所有MSIE浏览器来说都是误报,因为它们都列出“MSIE 6.0兼容”即使他们的版本实际上更高。@thomasrutter-只需添加
&&&!strpos($\u SERVER['HTTP\u USER\u AGENT'],'Opera'))
到您的
if
条件快速提示:在PHP中使用preg函数而不是ereg,它们更快。请注意,如果您只检查字符串是否存在,就不应该使用正则表达式函数。上面的答案建议使用strpos。如果检测到IE6,if中的代码段将返回TRUE。$ua=$\rVER['HTTP\u USER\u AGENT'];if(preg\u match('/\bmsie[56]\./i',$ua)和&!preg\u match('/\b(opera | msie[789])/i',$ua{echo'IE 5或6';}strpos()在这里可以更快地完成这项工作。除了“preg”应该是“preg\u match”之外,效果很好。语法
'/msie[1-6]/我的“
比较短,大多数人可能更熟悉。是的,你说得对:)但那是3年前的事了,现在我的regexp技能比那时要好得多;)注意,这种方法会错误地将IE10识别为匹配项。
//如果IE>6
的注释会误导。最近,当一个用户联系我说他们正在使用IE8,但我发现它是IE6时,我发现这是真的。泰伊
$is_ie = isIE(); //Any version
$is_ie_7 = isIE(array(7)); //IE 7
$is_old_id = isIE(array(6,7));//IE 7 and 8