2010-07-10 59 views
3

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

什么问题?

回答

2

检查字符串中的字TRIDENT。兼容性的东西,即在兼容模式。谷歌它,如果你想知道它是什么意思。但是,三叉戟这个词只有ie8 +。

编辑: 此外,你可以设置一个头/元标签强制ie8模式(不兼容)。但是,这可能在第二次请求之前不会生效。 Google也是如此。

+0

如果的preg_match( '/三叉戟\/4 \ 0.0;/I',$ _SERVER [ 'HTTP_USER_AGENT'])> 0比它的IE8 :) – vovafeldman 2010-07-10 18:36:34

+0

哈哈。我的PHP正在生锈,但在asp中有同样的问题:-P – Alxandr 2010-07-10 18:45:43

+0

你有这个解决方案吗? http://stackoverflow.com/a/17942323/1069083 – rubo77 2013-07-30 10:04:23

1

尝试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 
// ... 
9

我使用$ _ SERVER [ 'HTTP_USER_AGENT']来检测用户的浏览器

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

User-Agent字符串黑客是一个失败的游戏。有许多奇怪的情况可能会混淆你的脚本。

这是其中之一:IE8默认为兼容模式,假装为IE7。你可以通过在字符串中存在Trident/...来检测这种情况,但是当然如果所有字符串黑客的“解决方案”都会出错,如果该字符串碰巧出于其他原因而出现,可能会因为任何应用程序将任意字符串粘贴到IE的User-Agent头部的末尾,并且确实由于浏览器经常谎称他们是谁,中介可能会更改或删除头部。

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

服务器端UA嗅探是一个恐怖,你应该只能用它作为最后的手段,如果它真的不可能使用任何其他技术。对于向特定版本的IE显示不同内容的常见情况,使用条件注释更好。

+1

+1地狱与每日投票限制:) – galambalazs 2010-07-10 22:38:42

-1
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches); 
echo $version = $matches[1]; 
+1

你可能想详细说明你的代码blob在做什么,否则你的答案是毫无价值的。 – Veger 2012-12-20 09:01:58