我使用$ _SERVER ['HTTP_USER_AGENT']来检测用户的浏览器。 当我在IE8上的本地主机上运行var_dump时,它返回: ... compatible; MSIE 8.0; ... 但是,当我上传到我的主机(godaddy),我得到: ...兼容; MSIE 7.0; ...使用PHP检测IE浏览器版本
什么问题?
我使用$ _SERVER ['HTTP_USER_AGENT']来检测用户的浏览器。 当我在IE8上的本地主机上运行var_dump时,它返回: ... compatible; MSIE 8.0; ... 但是,当我上传到我的主机(godaddy),我得到: ...兼容; MSIE 7.0; ...使用PHP检测IE浏览器版本
什么问题?
检查字符串中的字TRIDENT
。兼容性的东西,即在兼容模式。谷歌它,如果你想知道它是什么意思。但是,三叉戟这个词只有ie8 +。
编辑: 此外,你可以设置一个头/元标签强制ie8模式(不兼容)。但是,这可能在第二次请求之前不会生效。 Google也是如此。
尝试get_browser()
看看会发生什么。
从链接:
<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";
$browser = get_browser(null, true);
print_r($browser);
?>
输出:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3
Array
(
[browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
[parent] => Firefox 0.9
[platform] => WinXP
[browser] => Firefox
// ...
我使用$ _ SERVER [ 'HTTP_USER_AGENT']来检测用户的浏览器
是啊,这就是问题所在。不要这样做。
User-Agent
字符串黑客是一个失败的游戏。有许多奇怪的情况可能会混淆你的脚本。
这是其中之一:IE8默认为兼容模式,假装为IE7。你可以通过在字符串中存在Trident/...
来检测这种情况,但是当然如果所有字符串黑客的“解决方案”都会出错,如果该字符串碰巧出于其他原因而出现,可能会因为任何应用程序将任意字符串粘贴到IE的User-Agent头部的末尾,并且确实由于浏览器经常谎称他们是谁,中介可能会更改或删除头部。
此外,通过在服务器端进行浏览器嗅探,您的HTTP响应取决于浏览器查看它们,这意味着代理缓存将错误的页面提供给错误的浏览器,除非您包含正确的Vary
标头。但如果你这样做,你在IE中打破缓存。
服务器端UA嗅探是一个恐怖,你应该只能用它作为最后的手段,如果它真的不可能使用任何其他技术。对于向特定版本的IE显示不同内容的常见情况,使用条件注释更好。
+1地狱与每日投票限制:) – galambalazs 2010-07-10 22:38:42
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
echo $version = $matches[1];
你可能想详细说明你的代码blob在做什么,否则你的答案是毫无价值的。 – Veger 2012-12-20 09:01:58
如果的preg_match( '/三叉戟\/4 \ 0.0;/I',$ _SERVER [ 'HTTP_USER_AGENT'])> 0比它的IE8 :) – vovafeldman 2010-07-10 18:36:34
哈哈。我的PHP正在生锈,但在asp中有同样的问题:-P – Alxandr 2010-07-10 18:45:43
你有这个解决方案吗? http://stackoverflow.com/a/17942323/1069083 – rubo77 2013-07-30 10:04:23