为什么$ _SERVER ['HTTP_USER_AGENT']不返回MSIE

时间:2014-10-06 16:16:47

标签: php browser

我正在尝试做一些php浏览器测试。当我看着

$_SERVER['HTTP_USER_AGENT'

我发现它返回了这个:

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

即使我在IE 11上。

当我在Chrome上时,它返回了这个:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36

哪个更有意义。为什么IE中没有MSIE,我该如何定位?

3 个答案:

答案 0 :(得分:5)

"Trident"是MSIE 11的布局引擎。正如您所看到的那样,当您使用IE 11时,它加载为Trident/7.0; rv:11.0)就像您在Chrome上一样,它加载为{{1} }。

如果您希望获得有关浏览器的更多信息,可以随时使用PHP的get_browser()功能。

答案 1 :(得分:1)

因为8的MSIE标志着它的版本通过TRIDENT。我早就找到了这个脚本。它还会检测浏览器是否处于兼容模式。它可能对你有所帮助,但它在JS:

编辑:通过简单的搜索,我在github找到了原始代码。

var ieUserAgent = {
    init: function () {
        // Get the user agent string
        var ua = navigator.userAgent;
        this.compatibilityMode = false;
        // Detect whether or not the browser is IE
        var ieRegex = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (ieRegex.exec(ua) == null)
            this.exception = "The user agent detected does not contain Internet Explorer.";

        // Get the current "emulated" version of IE
        this.renderVersion = parseFloat(RegExp.$1);
        this.version = this.renderVersion;

        // Check the browser version with the rest of the agent string to detect compatibility mode
        if (ua.indexOf("Trident/7.0") > -1) {
            if (ua.indexOf("MSIE 7.0") > -1) {
                this.compatibilityMode = true;
            }
            this.version = 11;                  // IE 11
        }
        else if (ua.indexOf("Trident/6.0") > -1) {
            if (ua.indexOf("MSIE 7.0") > -1) {
                this.compatibilityMode = true;
            }
            this.version = 10;                  // IE 10
        }
        else if (ua.indexOf("Trident/5.0") > -1) {      
            if (ua.indexOf("MSIE 7.0") > -1) {
                this.compatibilityMode = true;
            }
            this.version = 9;                   // IE 9
        }
        else if (ua.indexOf("Trident/4.0") > -1) {
            if (ua.indexOf("MSIE 7.0") > -1) {
                this.compatibilityMode = true;
            }
            this.version = 8;                   // IE 8
        }
        else if (ua.indexOf("MSIE 7.0") > -1)
            this.version = 7;                   // IE 7
        else
            this.version = 6;                   // IE 6
    }
};

// Initialize the ieUserAgent object
ieUserAgent.init();

$(document).ready(function() {
    if(ieUserAgent.compatibilityMode) {
        //do stuff
    }
    if(ieUserAgent.version == 6) {
        //do stuff
    }
});

答案 2 :(得分:1)

IE11删除用户代理字符串的“MSIE”部分。它不会就此止步 - navigator.appName将返回Netscapenavigator.product会返回Gecko

可能的原因是IE11已经赶上了现代网络标准,微软不希望它在整个网络上触发旧的if(IE) { // shitty simpler website }处理程序。他们希望看到Chrome / Firefox看到的同样功能齐全的版本。