php - 使用PHP检测IE浏览器版本

标签 php internet-explorer-8 internet-explorer-7 browser

我正在使用 $_SERVER['HTTP_USER_AGENT'] 来检测用户的浏览器。 当我在 IE8 上的本地主机上运行 var_dump 时,它返回: ...兼容的; MSIE 8.0; ... 但是当我将它上传到我的主机(godaddy)时,我得到: ...兼容的;微软 7.0; ...

有什么问题?

最佳答案

I'm using $_SERVER['HTTP_USER_AGENT'] to detect user's browser

是的,这就是问题所在。不要那样做。

User-Agent 字符串破解是一场失败的游戏。有许多奇怪的情况可能会使您的脚本感到困惑。

这是其中之一:IE8,当默认为兼容模式时,伪装成 IE7。您可以通过字符串中存在 Trident/... 来检测这种情况,但是当然像所有字符串黑客“解决方案”一样,如果该字符串恰好存在于其他字符串中,这将出错原因,可能是因为任何应用程序都可以将任意字符串粘贴到 IE 的 User-Agent header 的末尾,并且确实考虑到浏览器经常谎报它们是谁,并且中间人可能会更改或删除 header 。

此外,通过在服务器端进行浏览器嗅探,您的 HTTP 响应取决于查看它们的浏览器,这意味着代理缓存将向错误的浏览器提供错误的页面,除非您包含正确的 改变 header 。但如果你这样做,你就会破坏 IE 中的缓存。

服务器端 UA 嗅探是一种可怕的做法,只有在确实无法使用任何其他技术时,您才应将其用作最后的手段。对于向特定版本的 IE 显示不同内容的常见情况,您最好使用条件注释。

关于php - 使用PHP检测IE浏览器版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220344/

相关文章:

php - 将包含 mysql 函数的 mysql 查询传递给 PHP mysql_query

PHP读取CSV文件直到制表符空格

internet-explorer-8 - jQuery 1.4.2 在 doropdown 列表的更改事件上使用 .delegate()

javascript - IE7 + JavaScript appendChild = 滚动条错误

jQuery:样式属性在 IE 中不起作用

php - 我需要使用表中的员工 ID 从 mysql 数据库中获取数据

javascript - 如何使用 AJAX post 方法从 PHP 的特定函数中检索 JSON

html - 媒体查询取消链接 IE8 样式表

html - IE8背景色rgba

html - IE 不识别 TD 宽度?