2012-10-29 158 views
3

好的,所以我正在處理我公司的一些代碼回購,我在登錄檢查中偶然發現了這一點瀏覽器檢測。這非常多,特別是搜索MSIE,並且如果瀏覽器版本爲<= 6,則希望拒絕登錄。目前這是一個相當有缺陷的概念。看到該方法採用用戶代理字符串並刪除除版本號之外的所有內容,但本例中的版本號是單個數字,對於版本1-9檢測非常有用。但是,對於Internet Explorer 10,結果爲1,從而違反了邏輯並使其無效。PHP瀏覽器檢測IE瀏覽器> 6

所以現在我堅持努力保持這種邏輯在大多數情況下是相同的,但在本質上補償,將需要2位的版本,如10+

它是一個很長一段時間,因爲我」我做了任何特定版本的瀏覽器檢測。所以我希望有人能夠幫助我調整這一點,或者指向我可能會在同一個莊園中使用的更好/更新的功能。

if (isset($_SERVER['HTTP_USER_AGENT'])) { 
    $ua = $_SERVER['HTTP_USER_AGENT']; 
    if (strstr($ua,'MSIE') && substr($ua,strpos($ua,'MSIE')+5,1) <= 6) { 
     return $this->renderMessage(
      self::TEXT_LOGIN_FAILED, 
      'It seems that your browser is currently unsupported. We apologize for any inconveniences. Please switch to another browser and try again.' 
      ); 
    } 
} 

以上就是我目前的工作,你可以看到它有點亂,是誰做的本來沒想到遠頭有臉的人。而且我堅持不想破壞它,因爲我想保持它的相似性,但如果這樣做沒有任何意義的話,則不會。

+0

使用'preg_match'提取字符串('/ [0-9] {1,2} /')的1或2位部分,並見如果那小於6. –

+2

你是否必須這樣做?我的意思是,依靠來自'HTTP_USER_AGENT'的正確數據通常不是一個好主意...... – Jasper

+0

preg_match可能無法正常工作,因爲完整的用戶代理字符串會有多個匹配的數字,例如:'Mozilla/5.0(compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0'。@Jasper no我不需要依賴user_agent,只要有一種方法可以得到一個版本(如果有的話) – chris

回答

3

如何是這樣的:

$ua_array = explode(' ', $_SERVER['HTTP_USER_AGENT']); 
$msie_key = array_search('MSIE', $ua_array); 
if($msie_key !== false) { // you found MSIE browser 
    $msie_version_key = $msie_key + 1; 
    $msie_version = intval($ua_array[$msie_version_key]); 
    if ($msie_version <= 6) { 
     // reject user 
    } 
} 
+0

哦,這很聰明,我看到你在那裏做了很好的爆炸使用。 – chris