2012-07-22 38 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

相关问题