2012-07-22 122 views
1

我也添加了Chrome,但現在刪除了它,因爲它根本沒有任何效果。 在存儲信息的MySQL中,它顯示Mozilla和Chrome的mozilla。爲什麼? Chrome是否有自己的代碼?function getBrowserType()爲什麼Chrome顯示爲Mozilla?

function getBrowserType() { 
    if (!empty($_SERVER['HTTP_USER_AGENT'])) 
    { 
     $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT']; 
    } 
    else if (!empty($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) 
    { 
     $HTTP_USER_AGENT = $HTTP_SERVER_VARS['HTTP_USER_AGENT']; 
    } 
    else if (!isset($HTTP_USER_AGENT)) 
    { 
     $HTTP_USER_AGENT = ''; 
    } 
    if (preg_match('/Opera(\/|)([0-9].[0-9]{1,2})/', $HTTP_USER_AGENT, $log_version)) 
    { 
     $browser_version = $log_version[2]; 
     $browser_agent = 'opera'; 
    } 
    else if (preg_match('/MSIE ([0-9].[0-9]{1,2})/', $HTTP_USER_AGENT, $log_version)) 
    { 
     $browser_version = $log_version[1]; 
     $browser_agent = 'ie'; 
    } 
    else if (preg_match('/OmniWeb\/([0-9].[0-9]{1,2})/', $HTTP_USER_AGENT, $log_version)) 
    { 
     $browser_version = $log_version[1]; 
     $browser_agent = 'omniweb'; 
    } 
    else if (preg_match('/Netscape([0-9]{1})/', $HTTP_USER_AGENT, $log_version)) 
    { 
     $browser_version = $log_version[1]; 
     $browser_agent = 'netscape'; 
    } 
    else if (preg_match('/Mozilla\/([0-9].[0-9]{1,2})/', $HTTP_USER_AGENT, $log_version)) 
    { 
     $browser_version = $log_version[1]; 
     $browser_agent = 'mozilla'; 
    } 
    else if (preg_match('/Konqueror\/([0-9].[0-9]{1,2})/', $HTTP_USER_AGENT, $log_version)) 
    { 
     $browser_version = $log_version[1]; 
     $browser_agent = 'konqueror'; 
    } 
    else 
    { 
     $browser_version = 0; 
     $browser_agent = 'other'; 
    } 
    return $browser_agent; 
    } 
+5

鉻給人串像' 「的Mozilla/5.0(Windows NT的6.1; WOW64)爲AppleWebKit/536.11(KHTML,例如Gecko)Chrome瀏覽器/ Safari瀏覽器20.0.1132.57/536.11」'所以它匹配''/ Mozilla瀏覽器\/([0-9]。[0-9] {1,2})/'' – Esailija 2012-07-22 18:37:00

+2

http://webaim.org/blog/user-agent-string-history/ – gengkev 2012-07-22 18:39:22

回答

1

http://php.net/manual/en/function.get-browser.php 我在這裏找到的這段代碼很好用,測試過它。

<?php 
function getBrowser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT']; 
    $bname = 'Unknown'; 
    $platform = 'Unknown'; 
    $version= ""; 

    //First get the platform? 
    if (preg_match('/linux/i', $u_agent)) { 
     $platform = 'linux'; 
    } 
    elseif (preg_match('/macintosh|mac os x/i', $u_agent)) { 
     $platform = 'mac'; 
    } 
    elseif (preg_match('/windows|win32/i', $u_agent)) { 
     $platform = 'windows'; 
    } 

    // Next get the name of the useragent yes seperately and for good reason 
    if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
    { 
     $bname = 'Internet Explorer'; 
     $ub = "MSIE"; 
    } 
    elseif(preg_match('/Firefox/i',$u_agent)) 
    { 
     $bname = 'Mozilla Firefox'; 
     $ub = "Firefox"; 
    } 
    elseif(preg_match('/Chrome/i',$u_agent)) 
    { 
     $bname = 'Google Chrome'; 
     $ub = "Chrome"; 
    } 
    elseif(preg_match('/Safari/i',$u_agent)) 
    { 
     $bname = 'Apple Safari'; 
     $ub = "Safari"; 
    } 
    elseif(preg_match('/Opera/i',$u_agent)) 
    { 
     $bname = 'Opera'; 
     $ub = "Opera"; 
    } 
    elseif(preg_match('/Netscape/i',$u_agent)) 
    { 
     $bname = 'Netscape'; 
     $ub = "Netscape"; 
    } 

    // finally get the correct version number 
    $known = array('Version', $ub, 'other'); 
    $pattern = '#(?<browser>' . join('|', $known) . 
    ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#'; 
    if (!preg_match_all($pattern, $u_agent, $matches)) { 
     // we have no matching number just continue 
    } 

    // see how many we have 
    $i = count($matches['browser']); 
    if ($i != 1) { 
     //we will have two since we are not using 'other' argument yet 
     //see if version is before or after the name 
     if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){ 
      $version= $matches['version'][0]; 
     } 
     else { 
      $version= $matches['version'][1]; 
     } 
    } 
    else { 
     $version= $matches['version'][0]; 
    } 

    // check if we have a number 
    if ($version==null || $version=="") {$version="?";} 

    return array(
     'userAgent' => $u_agent, 
     'name'  => $bname, 
     'version' => $version, 
     'platform' => $platform, 
     'pattern' => $pattern 
    ); 
} 

// now try it 
$ua=getBrowser(); 
$yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent']; 
print_r($yourbrowser); 
?> 
3

許多瀏覽器在其用戶代理開始時都有Mozilla/5.0或其他東西。所以如果你要檢測這樣的瀏覽器,可能會有問題。然而,你可以使用這個get_browser()函數爲你做。它是相當準確的,你將不必理會自己有這麼多的正則表達式(你還需要不斷更新)

http://php.net/manual/en/function.get-browser.php

它可以這樣實現:

<?php 
$browser = get_browser($_SERVER['HTTP_USER_AGENT'], true); 
if($browser['browser'] == 'Mozilla'){ 
    echo 'Mozilla'; 
}else if($browser['browser'] == 'Chrome'){ 
    echo 'Chrome'; 
} 
?> 
+0

但有沒有一種方法使用我的方式? – MOTIVECODEX 2012-07-22 18:45:55

+1

@ F4LLCON是的,但你爲什麼要閱讀此後使用你的方式。 – Esailija 2012-07-22 18:47:54

+0

由於我使用的代碼經過了近6個小時的調整,所以我不想只爲chrome更改腳本。你能告訴我如何在腳本中實現chrome嗎? – MOTIVECODEX 2012-07-22 18:50:47

相關問題