任何人都可以告訴我使用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