从php中排除ie6

时间:2011-03-29 12:49:31

标签: php internet-explorer-6

我有一个脚本在除了ie6(包括ie7和ie8)之外的所有浏览器中都能正常工作。 有没有半可靠的方法我可以排除这个邪恶的浏览器。

我试过这个:

<!--[if !IE 6]>
<?php include("fconditionals.php"); ?>
<![endif]-->

和此:

$user_agent = getenv("HTTP_USER_AGENT");
if (preg_match("MSIE 6", $user_agent)) 
{ 
include("fconditionals.php");
}

3 个答案:

答案 0 :(得分:2)

第一个版本永远不会有效。 PHP只关心<?php ?>对并完全忽略它们之外的任何东西。 IE条件注释仅供浏览器使用,因此每次都会在服务器上执行包含。

第二个版本的逻辑反转 - 你在检测到IE6的任何时候都包含了这个文件。你需要!preg_match。但是,请记住,用户代理字符串受用户控制,可以伪造/黑客攻击/破坏。没有100%可靠的方法来检测无法以某种方式破坏的远程浏览器。

答案 1 :(得分:1)

您尝试的第一件事(条件注释)将无效,因为包含是在服务器上完成的,而页面正在生成,并且条件注释仅在页面下载后由浏览器检查。< / p>

条件注释将排除生成的代码在IE6中显示,但它仍将由服务器运行。

此外,您在此处使用它们的格式的条件注释也将排除所有非IE浏览器显示的代码。如果您只想影响IE,则需要重新格式化,以便其他浏览器不会使用<![if !IE 6]>语法而不是<!--[if !IE 6]>将内部代码视为注释。

该方法仍然不会阻止代码在服务器上运行。

您尝试的第二种方法更可能更接近您实际想要做的事情。但请注意,尽管PHP确实收到USER_AGENT字符串,但在大多数浏览器中都可以欺骗USER_AGENT,并且某些隐私/安全产品会像某些Web代理一样主动删除它。换句话说,USER_AGENT字符串不是确定某人使用的浏览器的100%可靠方式。

也就是说,如果您想要排除仅针对IE6执行的特定PHP代码,那么它可能是唯一可行的解​​决方案。

这对您不起作用的原因是您的代码仅包含 IE6而不是不包括。您需要在!前添加“非”运算符(preg_match())。

顺便说一下:在您的示例代码中,您有$user_agent = getenv("HTTP_USER_AGENT");。值得指出的是$_SERVER['USER_AGENT']已经可用作变量,您不需要使用getenv()。

答案 2 :(得分:1)

if (!strstr($_SERVER['HTTP_USER_AGENT'],"MSIE 6") 
{ 
    include("fconditionals.php");
}