Обнаружить режим совместимости IE только с PHP

Можно ли обнаружить, что IE находится в режиме совместимости с useragent с PHP ?

Я использую IE10 и имею пользовательскийагент

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) 

Таким образом, он появляется как Internet Explorer 7.

Конечно, было бы плохой идеей полагаться только на такое обнаружение PHP, но это очень полезно для некоторых ocasions (например, регистрация с помощью PHP или отладочных подсказок, …)

    С этого ресурса: http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx

    Чтобы обнаружить IE 10 в режиме совместимости, а не в обычном IE 7, вы должны посмотреть на токен Trident/6.0 который идентифицирует IE 10 независимо от режима.

    Чтобы обнаружить это из PHP, возьмите пользовательский агент из заголовков и проанализируйте его для токена Trident/6.0 .

    Вы можете узнать больше версий Internet Explorer из токена Trident: IE9 имеет Trident/5.0 , IE 8 имеет Trident/4.0 , IE 7 не имеет Trident в его пользовательском агенте.

    Строку пользовательского агента можно найти в $_SERVER['HTTP_USER_AGENT'] . Оттуда тривиально искать подстроку внутри или с регулярным выражением.

    Справочный элемент агента IE10:

    • обычный режим: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
    • совместимый режим: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0)

    Обратите внимание, что токен MSIE отличается, но токен Trident тот же. Это указывает на то, что у пользователя включен режим совместимости.

    Нет, это не так.

    Во-первых, весь смысл режима совместимости заключается в том, что он притворяется какой бы старой версией IE не был указан. Строка UA по умолчанию изменяется как часть этого, и она идентична строке UA, предоставленной реальной копией старой версии IE, которая эмулируется.

    Во-вторых, режим браузера (например, режим рендеринга) и режим документа (т. Е. Пользовательский агент) могут быть установлены отдельно в инструментах dev; можно быть в режиме совместимости с IE8, но все же показывать пользовательский агент IE10.

    Короче говоря, попытка обнаружить режим совместимости с использованием строки UA – плохая идея; это просто невозможно, и даже если это было возможно, его можно было бы легко подделать.

    Тем не менее, у вас никогда не должно быть веских оснований для фактического выполнения этого. Если ваш сайт сообщает IE, чтобы отобразить страницу в режиме совместимости, сервер должен уже знать об этом; его не нужно проверять. Есть несколько краевых случаев, когда это может неожиданно возникнуть, но вы можете обойти тех, у которых есть метатег X-UA-Compatible .

    Лучшая практика – избегать режима совместимости, если это вообще возможно; если вы правильно написали свой сайт, режим совместимости должен быть совершенно ненужным. Если вам это нужно, вам лучше будет исправлять код для правильной работы в IE10.