【问题标题】:How to detect really IE when changed user agent更改用户代理时如何检测真正的IE
【发布时间】:2015-11-30 04:28:42
【问题描述】:

在我的项目中使用PHP 检测浏览器,但我的客户使用IE11 并将用户代理更改为IE7。我的客户需要检测是IE11,而不是IE7。

请帮我检测一下真正的IE11

【问题讨论】:

  • 为什么您的用户将其用户代理字符串更改为 IE 7 的字符串?
  • 可能其他站点使用代理字符串 IE7。我不知道。
  • 用户报告的内容是设计使然。 应该更改 ua 字符串以使服务器认为用户在 IE 7 上。这主要是出于测试目的,或者是为了绕过写得不好的浏览器嗅探。用户不太可能有任何正当理由在打开开发者工具的情况下浏览网页,因此他们可以使用虚假的 ua 字符串。

标签: php internet-explorer user-agent


【解决方案1】:

用JS检查

function checkIE()
    {
        var ieVr = -1;
        if (navigator.appName == 'Microsoft Internet Explorer')
        {
            var agent = navigator.userAgent;
            var exp = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            if (exp.exec(agent) != null)
                ieVr = parseFloat(RegExp.$1);
        }
        else if (navigator.appName == 'Netscape')
        {
            var agent = navigator.userAgent;
            var exp = new RegExp("Trident/.*ieVr:([0-9]{1,}[\.0-9]{0,})");
            if (exp.exec(agent) != null)
                ieVr = parseFloat(RegExp.$1);
        }
        return ieVr;
    }

根据 PHP 中的 Doug

preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if(count($matches)<2){
  preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
}

if (count($matches)>1){
  //Then we're using IE
  $version = $matches[1];

  switch(true)
    {
    case ($version<=8):
      //IE 8 or under!
    break;

    case ($version==9 || $version==10):
      //IE9 & IE10!
    break;

    case ($version==11):
      //Version 11!
    break;

    default:
      //You get the idea
    }   
}

【讨论】:

  • 但这是 JS,在 PHP 中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多