【问题标题】:Exclude ie6 from a php include从 php 包含中排除 ie6
【发布时间】:2011-07-25 06:31:44
【问题描述】:

我有一个脚本可以在除 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");
}

【问题讨论】:

  • ...您有一个在 IE 中失败的 PHP 脚本? PHP 不关心浏览器。这是怎么回事,一个有条件的评论还不够?
  • 否 - 不是 php 脚本在 php 中失败 - php 为 jquery 脚本设置条件,该脚本在 ie6 本身中也不会失败,但不是那么好,而且我更喜欢通过 css 添加其他内容。

标签: php internet-explorer-6


【解决方案1】:
if (!strstr($_SERVER['HTTP_USER_AGENT'],"MSIE 6") 
{ 
    include("fconditionals.php");
}

【讨论】:

    【解决方案2】:

    您尝试的第一件事(条件注释)将不起作用,因为包含是在服务器上完成的,同时正在生成页面,并且只有在页面下载后浏览器才会检查条件 cmets。

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

    此外,您在此处使用的格式的条件 cmets 还将排除所有非 IE 浏览器显示的代码。如果你只想影响IE,你需要重新格式化它,使其他浏览器不把里面的代码当作注释,使用&lt;![if !IE 6]&gt;语法而不是&lt;!--[if !IE 6]&gt;

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

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

    也就是说,如果您有特定的 PHP 代码想要排除在仅用于 IE6 的情况下,那么它可能是唯一可行的解​​决方案。

    这对您不起作用的原因是您的代码包含仅 IE6 而不是排除它。您需要在preg_match() 前面添加一个'not' 运算符(!)。

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

    【讨论】:

    • 感谢您的回复。通过jquery获取或加载php,然后在js上使用条件语句排除ie6是否可靠?最终的脚本是 jquery,所以如果用户没有激活 jqueruy,他们无论如何都看不到这个效果......
    • @Gertruder - 老实说,在阅读了您上面的评论后,您更好的选择是在 Javascript 中进行浏览器检测,而不是在 PHP 中进行条件检测。 JQuery 有一个非常好的 .browser 方法,如果您需要某些代码在特定浏览器中运行,您可以使用该方法。 PHP 不是做这类事情的最佳场所。
    • 好的,谢谢 Spudly,我终于让它工作了: 代码 包裹围绕js代码。
    【解决方案3】:

    第一个版本永远不会工作。 PHP 只关心 &lt;?php ?&gt; 对,完全忽略它们之外的任何东西。 IE 条件 cmets 仅由浏览器使用,因此每次包含都会在服务器上执行。

    第二个版本的逻辑颠倒了——只要检测到 IE6,您就会包含该文件。你会想要!preg_match。但是,请记住,用户代理字符串在用户控制之下,并且可以被伪造/黑客/颠覆。没有 100% 可靠的方法来检测无法以某种方式被破坏的远程浏览器。

    【讨论】:

      猜你喜欢
      • 2018-08-29
      • 2015-12-13
      • 2013-01-09
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 2018-10-31
      相关资源
      最近更新 更多