使用PHP禁用所有IE版本的网页

时间:2014-01-20 10:47:37

标签: php html internet-explorer

我的代码只是从IE版本1到9 ...

如果我将[1-9]更改为[1-11]则无效:/

有人能帮助我吗?

function ieCheck()
{
    if(preg_match('/(?i)msie [1-9]/',$_SERVER['HTTP_USER_AGENT']))
    {    
        echo "This website is not optimised for IE";
        exit;
    }
}

3 个答案:

答案 0 :(得分:6)

首先,[1-11]并不代表“1到11之间的任何数字”,因为那不是how regular expression syntax works。相反,[0-9]+将是简单性和技术上正确的良好权衡。

其次,IE11的用户代理字符串与所有版本< = 10的用户代理字符串完全不同,您需要一个单独的正则表达式来解析它;您需要的信息在MSDN上提供。

最后,考虑到从9开始的IE版本是非常符合标准的(对于10和11更是如此),你应该再看看你在这里做了什么。我非常怀疑,例如IE 10不会呈现您的页面正确的内容。

答案 1 :(得分:3)

正则表达式中的字符块[1-9]只是匹配该位置的数字。由于“msie 11”在该位置有两个位,因此您需要匹配“一个或多个”来覆盖所有情况。

将你的正则表达式更改为它,它应该可以工作:

/(?i)msie [0-9]+/

那将匹配

  • msie 1
  • msie 2
  • ...
  • msie 10
  • msie 11
  • ...
  • msie 999

IE11的报告方式不同,因此在这种情况下您需要查找字符串“Trident”:

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

正则表达式:

/(?i)(msie [0-9]+)|(Trident/[0-9]+)/

答案 2 :(得分:0)

使用PHP

<?php 
if(isset($_SERVER['HTTP_USER_AGENT'])){
$agent = $_SERVER['HTTP_USER_AGENT'];
if(strlen(strstr($agent,"MSIE")) > 10 ){ 
echo "sorry: not compatible";
}}
?>

使用PHP(特定)

<?php 
    if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE)
echo 'Internet explorer';
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== FALSE)
echo 'Mozilla Firefox';
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== FALSE)
echo 'Google Chrome';
else
echo 'Something else';
?>

使用javascript