Я использую $ _SERVER ['HTTP_USER_AGENT'] для обнаружения браузера пользователя
Да, это проблема. Не делай этого.
User-Agent
взлом строки - проигрышная игра. Существует множество странных ситуаций, которые могут запутать ваши сценарии.
Это один из них: IE8 по умолчанию в режиме совместимости претендует на IE7. Вы можете обнаружить этот случай по присутствию Trident/...
в строке, но, конечно же, как и у всех «решений» по взлому строк, все пойдет не так, если эта строка присутствует по другим причинам, которые могут быть даны, что любой приложение может прикрепить произвольные строки к концу заголовка User-Agent в IE, и в действительности, учитывая, что браузеры регулярно врут о том, кто они, а посредники могут изменять или удалять заголовок.
Кроме того, выполняя сниффинг в браузере на стороне сервера, вы заставляете свои HTTP-ответы зависеть от браузера, просматривающего их, что означает, что прокси-кэши будут показывать неправильную страницу не тому браузеру, если вы не включите правильный Vary
заголовок. Но если вы сделаете это, вы нарушите кеширование в IE.
Обнюхивание UA на стороне сервера - это ужас, который вам следует использовать только в качестве крайней меры, если действительно невозможно использовать какую-либо другую технику. Для обычного случая показа различного контента в определенных версиях IE вам гораздо лучше использовать условные комментарии.