2013-02-08 108 views
-1

我正在寻找一个正确的代码段落,因为我的IE 10不工作。我搜索了stackoverflow,并在互联网上花了很多时间,但问题不一样(以及MSDN上的提示对所有的代码示例错误)HTTP_USER_AGENT位置Internet Explorer 10

这里是我的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浏览器除IE以外10! IE 10挂起,显示带重定向页面browser.html的网址的空白页面。

使用IE6和IE 7时,您会看到browser.html文件,并提示您应升级IE版本。

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

+0

开始通过解释你想做的事。你在哪里将响应状态更改为301或302?你知道IE10永远不会在Windows NT5.2上运行,对吧?你知道除了在CompatView模式下,IE10不会发送.NET CLR令牌,对吗? – EricLaw 2013-02-08 17:41:48

回答

1

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

if(strpos($ua,'.NET CLR') === false) return; 
} 
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上,问题现在已经解决了。

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.0,substr($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] 
}