-1

我正在寻找正确的代码段落,因为我的不适用于 IE 10。我搜索了 stackoverflow,并在互联网上花了很多时间,但问题并不相同(并且 MSDN 上的提示在所有代码示例中都有错误! )

这是我的php代码:

<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if (strpos($ua,'MSIE') != false && strpos($ua,'Opera') === false) {
    if (strpos($ua,'Windows NT 5.2') != false) {
        if(strpos($ua,'.NET CLR') === false) return;
        }
        if (substr($ua,strpos($ua,'MSIE')+5,1) < 7){
            header('Location: http://www.domain.org/xxxx/browser.html');
            exit;
        }
    }
?>

此代码适用于除 IE 10 之外的所有 IE 版本!IE 10 挂起,显示带有重定向页面 browser.html 的 url 的空白页面。

在 IE6 和 IE 7 中,您会看到 browser.html 带有您应该升级 IE 版本的消息。

这段代码有什么问题??我知道我可以使用条件注释,但重定向更适合我的情况。

4

3 回答 3

1

据我所知,Internet Explorer 10 不再在用户代理字符串中发送.NET CLR信息。首先尝试删除它:

if(strpos($ua,'.NET CLR') === false) return;
}
于 2013-02-08T22:10:44.603 回答
0

以下是 IE 用户代理的两个示例:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0)

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; [platform token] Trident/6.0; Touch)

如您所见,当尝试在该行检测 IE 版本时出现问题:

if (substr($ua,strpos($ua,'MSIE')+5,1) < 7){

因为在版本的情况下10.0substr($ua,strpos($ua,'MSIE')+5,1)只会匹配1而不匹配10,所以1 < 7

修复它的简单方法是:

preg_match('#MSIE ([0-9]{1,2}\.[0-9]{0,2});#si',$ua,$m);
if ($m[1] < 7) {
  [your code]
}
于 2013-03-04T14:06:57.450 回答
0

好的,我有解决办法!它与代码段落无关:

if (strpos($ua,'Windows NT 5.2') != false)

或者

if(strpos($ua,'.NET CLR') === false) return;

问题在线

 if (substr($ua,strpos($ua,'MSIE')+5,1) < 7){

Internet Explorer 10 不理解数学符号 < 。

如果我这样写:

if ((substr($ua,strpos($ua,'MSIE')+5,1) == 6) || (substr($ua,strpos($ua,'MSIE')+5,1) == 7)) 

代码有效!

所以这是适用于 IE6 和 IE7(它重定向到页面 browser.html)和 IE8、IE9 和 IE10(以及所有其他非 IE 浏览器)的完整代码:

<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if (strpos($ua,'MSIE') != false && strpos($ua,'Opera') === false){
    if ((substr($ua,strpos($ua,'MSIE')+5,1) == 6) || (substr($ua,strpos($ua,'MSIE')+5,1) == 7)) 
    {
        header('Location: http://www.domain.org/xxxx/browser.html');
        exit;
    }
}
?>

所以,你可以插入我上面提到的前两行。它也适用于这两行,但我认为:我使用的代码越少越好:-)

也许其他人也会测试它。在我的虚拟 Windows 7 上,问题现在已经解决了。

于 2013-02-11T10:58:39.140 回答