我正在使用 $_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/