有人能告诉我使用php检测浏览器的最佳方法吗? IE 6和7在实现与CSS的完全浏览器兼容性方面非常糟糕,因此我的网站不会支持8岁以上的IE版本。
我目前正在使用$_SERVER['HTTP_USER_AGENT']
来检测浏览器,但我被告知这不是一个好办法,因为浏览器可以撒谎并发送他们想要的任何用户代理信息。那么,有没有人知道检测客户端正在使用的浏览器类型的确定方法?
答案 0 :(得分:4)
您无法可靠地检测浏览器的内容。就这么简单。
浏览器能够说谎,并经常这样做。
某些代理和安全产品会从请求中删除用户代理数据,因此您的PHP代码可能只会获得一个空字符串。
在Javascript中你可能会有更多的运气,虽然它仍然存在问题,但在PHP级别你永远无法确定。
我的第一个建议是放弃对IE6的支持,除非你的人口统计数据真的是少数民族。目前,大多数发达国家的IE6使用率统计数据已降至2.5%以下。仅此一项就可以解决大部分CSS问题。 IE7仍然不是很好,但它比IE6更好,并且在坚持现代标准的同时它也是可支持的。
我的第二个建议是尝试升级浏览器,而不是尝试降级这些浏览器的网站。
有许多非常好的黑客和工具可以让你在旧版本的IE中改进CSS支持。我建议你尝试以下方法:
当然,无处不在的JQuery。
答案 1 :(得分:1)
使用PHP检测用户浏览器的最佳方法是不使用PHP检查用户的浏览器。
你已经提到IE lt 8很糟糕(这是每个web开发人员都同意的东西),告诉用户他们的浏览器太旧的最好方法是在HTML中使用条件注释: / p>
<head>
...
<!--[if IE lt 8]>
<link rel="stylesheet" type="text/css" href="ie-styles.css" />
<![endif]-->
</head>
<body>
<!--[if IE lt 8]>
<div id="ie-only">
<p>Please get a <a href="http://www.abetterbrowser.org/">better browser</a>.</p>
</div>
<![endif]-->
...
</body>
我写的代码显示了你可以做的两件事:首先它表明你可以设置一个只有IE的样式表,其次它表明你可以只设置IE的块。
我认为你没有理由不允许你的IE用户使用你的wobsite,如果它不起作用,只要让他们知道使用一个糟糕的浏览器是他们自己的错误。
这也允许您为后续的PHP调用设置一个cookie:
<!--[if IE lt 8]>
<script type="text/javascript">document.cookie='isie=oh-crud-you-use-ie';</script>
<![endif]-->
答案 2 :(得分:0)
(愚蠢的回答提醒。)
如果您只对检测IE6和7感兴趣,可以创建一个中间页面:
<form action="wherever.php" method="post">
<!--[if lt IE 8]>
<input type="hidden" name="too_old" value="1" />
<![endif]-->
</form>
<script>
document.getElementsByTagName('form')[0].submit();
</script>
这将是整个页面,原样。 (如果你愿意的话,你可以为那些没有启用JS的人添加一些东西。)
然后,当它进入下一页时,你可以拥有这个PHP:
$location = empty($_GET['too_old']) ? 'good_page.wherever' : 'bad_page.whatever';
header('Location: '.$location);
inb4“但是有很多方法可以解决这个问题。”
答案 3 :(得分:0)
检测浏览器的最佳方法是使用下面给出的php类。 我一年前为我的网站创建了这个。它适用于chrome,firefox,opera和Internet Explorer。
<?php
class Browser {
public static function detect() {
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
if ((substr($_SERVER['HTTP_USER_AGENT'],0,6)=="Opera/") || (strpos($userAgent,'opera')) != false ){
$name = 'opera';
}
elseif ((strpos($userAgent,'chrome')) != false) {
$name = 'chrome';
}
elseif ((strpos($userAgent,'safari')) != false && (strpos($userAgent,'chrome')) == false && (strpos($userAgent,'chrome')) == false){
$name = 'safari';
}
elseif (preg_match('/msie/', $userAgent)) {
$name = 'msie';
}
elseif ((strpos($userAgent,'firefox')) != false) {
$name = 'firefox';
}
else {
$name = 'unrecognized';
}
if (preg_match('/.+(?:me|ox|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches) && $browser['name']=='safari' ) {
$version = $matches[1];
}
if (preg_match('/.+(?:me|ox|it|on|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches) && $browser['name']!='safari' ) {
$version = $matches[1];
}
else {
$version = 'unknown';
}
return array(
'name' => $name,
'version' => $version,
);
}
}
$browser = Browser::detect();
echo 'You browser is '.$browser['name'].' version '.$browser['version'];
echo "<br />";
?>
答案 4 :(得分:-1)
您只能使用Javascript可靠地检测浏览器用户代理。对于PHP,您必须依赖$ _SERVER ['HTTP_USER_AGENT']的内容。