任何人都可以告诉我使用php检测浏览器的最佳方法吗? IE 6和7在实现浏览器与CSS的完全兼容性方面非常糟糕,所以我的网站不支持和8以上的IE版本。用php检测浏览器的最佳方法是什么?
我目前使用$_SERVER['HTTP_USER_AGENT']
来检测浏览器,但我有人告诉我们,这不是一个好办法,因为浏览器可以撒谎并发送他们想要的任何用户代理信息。那么,有没有人知道确定的火灾方式来检测客户端正在使用的浏览器类型?
任何人都可以告诉我使用php检测浏览器的最佳方法吗? IE 6和7在实现浏览器与CSS的完全兼容性方面非常糟糕,所以我的网站不支持和8以上的IE版本。用php检测浏览器的最佳方法是什么?
我目前使用$_SERVER['HTTP_USER_AGENT']
来检测浏览器,但我有人告诉我们,这不是一个好办法,因为浏览器可以撒谎并发送他们想要的任何用户代理信息。那么,有没有人知道确定的火灾方式来检测客户端正在使用的浏览器类型?
您无法可靠地检测浏览器是什么。就这么简单。
浏览器能够说谎他们的身份,并经常这样做。
某些代理和安全产品会剥离请求中的用户代理数据,因此您的PHP代码可能只会得到一个空字符串。
在Javascript中,您可能会有更多运气,尽管它仍然存在问题,但在PHP级别,您永远无法确定。
我的第一个建议是放弃对IE6的支持,除非你的人口是真正的少数族裔。现在大多数发达国家的IE6使用统计降至2.5%以下。仅此一项就可以摆脱大部分CSS问题。 IE7仍然不太好,但它比IE6更加明显,而且它坚持现代标准的同时也是可以支持的。
我的第二个建议是,而不是试图降级您的网站这些浏览器,尝试升级浏览器。
有许多非常好的黑客和工具,可以让您在旧版IE中改进CSS支持。我建议你尝试以下方法:
和当然,无处不在的JQuery。
您只能使用Javascript可靠地检测浏览器用户代理。对于PHP,您必须依赖$ _SERVER ['HTTP_USER_AGENT']的内容。
(傻回答警报)
如果你只在检测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“但有很多方法可以打破这一点。“
用PHP来检测用户的浏览器,最好的办法是不检查用户与PHP的浏览器。
你提到IE LT 8 CSS吮吸(这是每个Web开发可以同意),告诉他们的浏览器太旧用户的最好办法是在HTML条件注释:
<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浏览器的HTML。
我看不出有什么理由让你的IE用户不能使用你的wobsite,如果它不工作,只是让他们知道这是他们自己的错误使用一个不起眼的浏览器。
这也将让你设置一个cookie后续PHP呼叫:
<!--[if IE lt 8]>
<script type="text/javascript">document.cookie='isie=oh-crud-you-use-ie';</script>
<![endif]-->
来检测浏览器的最好方法是使用下面给出的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 />";
?>
你应该接受你的问题的答案。 – SLaks 2011-01-27 16:49:05
嗯。我已经接受了以前的问题的答案。你怎么知道我是否做到了? – Lance 2011-01-27 16:51:24
任何知道如何更改用户代理的人都不会使用IE6或7 – Ross 2011-01-27 16:53:37