2011-01-27 72 views
3

任何人都可以告訴我使用php檢測瀏覽器的最佳方法嗎? IE 6和7在實現瀏覽器與CSS的完全兼容性方面非常糟糕,所以我的網站不支持和8以上的IE版本。用php檢測瀏覽器的最佳方法是什麼?

我目前使用$_SERVER['HTTP_USER_AGENT']來檢測瀏覽器,但我有人告訴我們,這不是一個好辦法,因爲瀏覽器可以撒謊併發送他們想要的任何用戶代理信息。那麼,有沒有人知道確定的火災方式來檢測客戶端正在使用的瀏覽器類型?

+8

你應該接受你的問題的答案。 – SLaks 2011-01-27 16:49:05

+0

嗯。我已經接受了以前的問題的答案。你怎麼知道我是否做到了? – Lance 2011-01-27 16:51:24

+0

任何知道如何更改用戶代理的人都不會使用IE6或7 – Ross 2011-01-27 16:53:37

回答

4

您無法可靠地檢測瀏覽器是什麼。就這麼簡單。

瀏覽器能夠說謊他們的身份,並經常這樣做。

某些代理和安全產品會剝離請求中的用戶代理數據,因此您的PHP代碼可能只會得到一個空字符串。

在Javascript中,您可能會有更多運氣,儘管它仍然存在問題,但在PHP級別,您永遠無法確定。

我的第一個建議是放棄對IE6的支持,除非你的人口是真正的少數族裔。現在大多數發達國家的IE6使用統計降至2.5%以下。僅此一項就可以擺脫大部分CSS問題。 IE7仍然不太好,但它比IE6更加明顯,而且它堅持現代標準的同時也是可以支持的。

我的第二個建議是,而不是試圖降級您的網站這些瀏覽器,嘗試升級瀏覽器。

有許多非常好的黑客和工具,可以讓您在舊版IE中改進CSS支持。我建議你嘗試以下方法:

和當然,無處不在的JQuery

-1

您只能使用Javascript可靠地檢測瀏覽器用戶代理。對於PHP,您必須依賴$ _SERVER ['HTTP_USER_AGENT']的內容。

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「但有很多方法可以打破這一點。「

1

用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]--> 
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 />"; 
    ?> 
相關問題