如何获得确切的浏览器名称和版本?

我已经尝试了一些解决scheme,但我无法得到确切的名称和版本:

我正在尝试下面的代码:

$browserAgent = $_SERVER['HTTP_USER_AGENT']; echo $browserAgent; 

以上代码的输出:

 Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24 

但是我正在使用:

 Google Chrome 11.0.696.68 on Ubuntu 10.04 

所以我可以在输出string中findChrome/11.0.696.68 ,但是它也显示了一些令人困惑的浏览器名称,从string中提取确切的浏览器名称/版本

使用get_browser()

从手册

 echo $_SERVER['HTTP_USER_AGENT'] . "\n\n"; $browser = get_browser(null, true); print_r($browser); 

将返回

 Array ( [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$ [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*/ [parent] => Firefox 0.9 [platform] => WinXP [browser] => Firefox [version] => 0.9 [majorver] => 0 [minorver] => 9 [cssversion] => 2 [frames] => 1 [iframes] => 1 [tables] => 1 [cookies] => 1 [backgroundsounds] => [vbscript] => [javascript] => 1 [javaapplets] => 1 [activexcontrols] => [cdf] => [aol] => [beta] => 1 [win16] => [crawler] => [stripper] => [wap] => [netclr] => ) 

这个JavaScript给你的浏览器名称和版本,

 var browser = ''; var browserVersion = 0; if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { browser = 'Opera'; } else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { browser = 'MSIE'; } else if (/Navigator[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { browser = 'Netscape'; } else if (/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { browser = 'Chrome'; } else if (/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { browser = 'Safari'; /Version[\/\s](\d+\.\d+)/.test(navigator.userAgent); browserVersion = new Number(RegExp.$1); } else if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { browser = 'Firefox'; } if(browserVersion === 0){ browserVersion = parseFloat(new Number(RegExp.$1)); } alert(browser + "*" + browserVersion); 

我想build议你这个惊人的类。 这对我来说工作得很好。

http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html/

我正在发布我使用原始作者版权声明的代码。 您可以从上面的链接获取最新的代码。

 <?php /** * File: Browser.php * Author: Chris Schuld (http://chrisschuld.com/) * * Copyright (C) 2008-2010 Chris Schuld (chris@chrisschuld.com) * * Typical Usage: * * $browser = new Browser(); * if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) { * echo 'You have FireFox version 2 or greater'; * } * */ class Browser { private $_agent = ''; private $_browser_name = ''; private $_version = ''; private $_platform = ''; private $_os = ''; private $_is_aol = false; private $_is_mobile = false; private $_is_robot = false; private $_aol_version = ''; const BROWSER_UNKNOWN = 'unknown'; const VERSION_UNKNOWN = 'unknown'; const BROWSER_OPERA = 'Opera'; const BROWSER_OPERA_MINI = 'Opera Mini'; const BROWSER_WEBTV = 'WebTV'; const BROWSER_IE = 'Internet Explorer'; const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; const BROWSER_KONQUEROR = 'Konqueror'; const BROWSER_ICAB = 'iCab'; const BROWSER_OMNIWEB = 'OmniWeb'; const BROWSER_FIREBIRD = 'Firebird'; const BROWSER_FIREFOX = 'Firefox'; const BROWSER_ICEWEASEL = 'Iceweasel'; const BROWSER_SHIRETOKO = 'Shiretoko'; const BROWSER_MOZILLA = 'Mozilla'; const BROWSER_AMAYA = 'Amaya'; const BROWSER_LYNX = 'Lynx'; const BROWSER_SAFARI = 'Safari'; const BROWSER_IPHONE = 'iPhone'; const BROWSER_IPOD = 'iPod'; const BROWSER_IPAD = 'iPad'; const BROWSER_CHROME = 'Chrome'; const BROWSER_ANDROID = 'Android'; const BROWSER_GOOGLEBOT = 'GoogleBot'; const BROWSER_SLURP = 'Yahoo! Slurp'; const BROWSER_W3CVALIDATOR = 'W3C Validator'; const BROWSER_BLACKBERRY = 'BlackBerry'; const BROWSER_ICECAT = 'IceCat'; const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; const BROWSER_NOKIA = 'Nokia Browser'; const BROWSER_MSN = 'MSN Browser'; const BROWSER_MSNBOT = 'MSN Bot'; const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; const BROWSER_GALEON = 'Galeon'; const BROWSER_NETPOSITIVE = 'NetPositive'; const BROWSER_PHOENIX = 'Phoenix'; const PLATFORM_UNKNOWN = 'unknown'; const PLATFORM_WINDOWS = 'Windows'; const PLATFORM_WINDOWS_CE = 'Windows CE'; const PLATFORM_APPLE = 'Apple'; const PLATFORM_LINUX = 'Linux'; const PLATFORM_OS2 = 'OS/2'; const PLATFORM_BEOS = 'BeOS'; const PLATFORM_IPHONE = 'iPhone'; const PLATFORM_IPOD = 'iPod'; const PLATFORM_IPAD = 'iPad'; const PLATFORM_BLACKBERRY = 'BlackBerry'; const PLATFORM_NOKIA = 'Nokia'; const PLATFORM_FREEBSD = 'FreeBSD'; const PLATFORM_OPENBSD = 'OpenBSD'; const PLATFORM_NETBSD = 'NetBSD'; const PLATFORM_SUNOS = 'SunOS'; const PLATFORM_OPENSOLARIS = 'OpenSolaris'; const PLATFORM_ANDROID = 'Android'; const OPERATING_SYSTEM_UNKNOWN = 'unknown'; public function Browser($useragent="") { $this->reset(); if( $useragent != "" ) { $this->setUserAgent($useragent); } else { $this->determine(); } } /** * Reset all properties */ public function reset() { $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ""; $this->_browser_name = self::BROWSER_UNKNOWN; $this->_version = self::VERSION_UNKNOWN; $this->_platform = self::PLATFORM_UNKNOWN; $this->_os = self::OPERATING_SYSTEM_UNKNOWN; $this->_is_aol = false; $this->_is_mobile = false; $this->_is_robot = false; $this->_aol_version = self::VERSION_UNKNOWN; } /** * Check to see if the specific browser is valid * @param string $browserName * @return boolean */ function isBrowser($browserName) { return( 0 == strcasecmp($this->_browser_name, trim($browserName))); } /** * The name of the browser. All return types are from the class contants * @return string Name of the browser */ public function getBrowser() { return $this->_browser_name; } /** * Set the name of the browser * @param $browser The name of the Browser */ public function setBrowser($browser) { return $this->_browser_name = $browser; } /** * The name of the platform. All return types are from the class contants * @return string Name of the browser */ public function getPlatform() { return $this->_platform; } /** * Set the name of the platform * @param $platform The name of the Platform */ public function setPlatform($platform) { return $this->_platform = $platform; } /** * The version of the browser. * @return string Version of the browser (will only contain alpha-numeric characters and a period) */ public function getVersion() { return $this->_version; } /** * Set the version of the browser * @param $version The version of the Browser */ public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,az,AZ-]/','',$version); } /** * The version of AOL. * @return string Version of AOL (will only contain alpha-numeric characters and a period) */ public function getAolVersion() { return $this->_aol_version; } /** * Set the version of AOL * @param $version The version of AOL */ public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,az,AZ]/','',$version); } /** * Is the browser from AOL? * @return boolean */ public function isAol() { return $this->_is_aol; } /** * Is the browser from a mobile device? * @return boolean */ public function isMobile() { return $this->_is_mobile; } /** * Is the browser from a robot (ex Slurp,GoogleBot)? * @return boolean */ public function isRobot() { return $this->_is_robot; } /** * Set the browser to be from AOL * @param $isAol */ public function setAol($isAol) { $this->_is_aol = $isAol; } /** * Set the Browser to be mobile * @param boolean */ protected function setMobile($value=true) { $this->_is_mobile = $value; } /** * Set the Browser to be a robot * @param boolean */ protected function setRobot($value=true) { $this->_is_robot = $value; } /** * Get the user agent value in use to determine the browser * @return string The user agent from the HTTP header */ public function getUserAgent() { return $this->_agent; } /** * Set the user agent value (the construction will use the HTTP header value - this will overwrite it) * @param $agent_string The value for the User Agent */ public function setUserAgent($agent_string) { $this->reset(); $this->_agent = $agent_string; $this->determine(); } /** * Used to determine if the browser is actually "chromeframe" * @return boolean */ public function isChromeFrame() { return( strpos($this->_agent,"chromeframe") !== false ); } /** * Returns a formatted string with a summary of the details of the browser. * @return string formatted string with a summary of the browser */ public function __toString() { return "<strong>Browser Name:</strong>{$this->getBrowser()}<br/>\n" . "<strong>Browser Version:</strong>{$this->getVersion()}<br/>\n" . "<strong>Browser User Agent String:</strong>{$this->getUserAgent()}<br/>\n" . "<strong>Platform:</strong>{$this->getPlatform()}<br/>"; } /** * Protected routine to calculate and determine what the browser is in use (including platform) */ protected function determine() { $this->checkPlatform(); $this->checkBrowsers(); $this->checkForAol(); } /** * Protected routine to determine the browser type * @return boolean */ protected function checkBrowsers() { return ( $this->checkBrowserWebTv() || $this->checkBrowserInternetExplorer() || $this->checkBrowserOpera() || $this->checkBrowserGaleon() || $this->checkBrowserNetscapeNavigator9Plus() || $this->checkBrowserFirefox() || $this->checkBrowserChrome() || $this->checkBrowserOmniWeb() || // common mobile $this->checkBrowserAndroid() || $this->checkBrowseriPad() || $this->checkBrowseriPod() || $this->checkBrowseriPhone() || $this->checkBrowserBlackBerry() || $this->checkBrowserNokia() || // common bots $this->checkBrowserGoogleBot() || $this->checkBrowserMSNBot() || $this->checkBrowserSlurp() || // WebKit base check (post mobile and others) $this->checkBrowserSafari() || // everyone else $this->checkBrowserNetPositive() || $this->checkBrowserFirebird() || $this->checkBrowserKonqueror() || $this->checkBrowserIcab() || $this->checkBrowserPhoenix() || $this->checkBrowserAmaya() || $this->checkBrowserLynx() || $this->checkBrowserShiretoko() || $this->checkBrowserIceCat() || $this->checkBrowserW3CValidator() || $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */ ); } protected function checkBrowserBlackBerry() { if( stripos($this->_agent,'blackberry') !== false ) { $aresult = explode("/",stristr($this->_agent,"BlackBerry")); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_BLACKBERRY; $this->setMobile(true); return true; } return false; } protected function checkForAol() { $this->setAol(false); $this->setAolVersion(self::VERSION_UNKNOWN); if( stripos($this->_agent,'aol') !== false ) { $aversion = explode(' ',stristr($this->_agent, 'AOL')); $this->setAol(true); $this->setAolVersion(preg_replace('/[^0-9\.az]/i', '', $aversion[1])); return true; } return false; } protected function checkBrowserGoogleBot() { if( stripos($this->_agent,'googlebot') !== false ) { $aresult = explode('/',stristr($this->_agent,'googlebot')); $aversion = explode(' ',$aresult[1]); $this->setVersion(str_replace(';','',$aversion[0])); $this->_browser_name = self::BROWSER_GOOGLEBOT; $this->setRobot(true); return true; } return false; } protected function checkBrowserMSNBot() { if( stripos($this->_agent,"msnbot") !== false ) { $aresult = explode("/",stristr($this->_agent,"msnbot")); $aversion = explode(" ",$aresult[1]); $this->setVersion(str_replace(";","",$aversion[0])); $this->_browser_name = self::BROWSER_MSNBOT; $this->setRobot(true); return true; } return false; } protected function checkBrowserW3CValidator() { if( stripos($this->_agent,'W3C-checklink') !== false ) { $aresult = explode('/',stristr($this->_agent,'W3C-checklink')); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_W3CVALIDATOR; return true; } else if( stripos($this->_agent,'W3C_Validator') !== false ) { // Some of the Validator versions do not delineate w/ a slash - add it back in $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent); $aresult = explode('/',stristr($ua,'W3C_Validator')); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_W3CVALIDATOR; return true; } return false; } protected function checkBrowserSlurp() { if( stripos($this->_agent,'slurp') !== false ) { $aresult = explode('/',stristr($this->_agent,'Slurp')); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_SLURP; $this->setRobot(true); $this->setMobile(false); return true; } return false; } protected function checkBrowserInternetExplorer() { // Test for v1 - v1.5 IE if( stripos($this->_agent,'microsoft internet explorer') !== false ) { $this->setBrowser(self::BROWSER_IE); $this->setVersion('1.0'); $aresult = stristr($this->_agent, '/'); if( preg_match('/308|425|426|474|0b1/i', $aresult) ) { $this->setVersion('1.5'); } return true; } // Test for versions > 1.5 else if( stripos($this->_agent,'msie') !== false && stripos($this->_agent,'opera') === false ) { // See if the browser is the odd MSN Explorer if( stripos($this->_agent,'msnb') !== false ) { $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'MSN')); $this->setBrowser( self::BROWSER_MSN ); $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1])); return true; } $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'msie')); $this->setBrowser( self::BROWSER_IE ); $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1])); return true; } // Test for Pocket IE else if( stripos($this->_agent,'mspie') !== false || stripos($this->_agent,'pocket') !== false ) { $aresult = explode(' ',stristr($this->_agent,'mspie')); $this->setPlatform( self::PLATFORM_WINDOWS_CE ); $this->setBrowser( self::BROWSER_POCKET_IE ); $this->setMobile(true); if( stripos($this->_agent,'mspie') !== false ) { $this->setVersion($aresult[1]); } else { $aversion = explode('/',$this->_agent); $this->setVersion($aversion[1]); } return true; } return false; } protected function checkBrowserOpera() { if( stripos($this->_agent,'opera mini') !== false ) { $resultant = stristr($this->_agent, 'opera mini'); if( preg_match('/\//',$resultant) ) { $aresult = explode('/',$resultant); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); } else { $aversion = explode(' ',stristr($resultant,'opera mini')); $this->setVersion($aversion[1]); } $this->_browser_name = self::BROWSER_OPERA_MINI; $this->setMobile(true); return true; } else if( stripos($this->_agent,'opera') !== false ) { $resultant = stristr($this->_agent, 'opera'); if( preg_match('/Version\/(10.*)$/',$resultant,$matches) ) { $this->setVersion($matches[1]); } else if( preg_match('/\//',$resultant) ) { $aresult = explode('/',str_replace("("," ",$resultant)); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); } else { $aversion = explode(' ',stristr($resultant,'opera')); $this->setVersion(isset($aversion[1])?$aversion[1]:""); } $this->_browser_name = self::BROWSER_OPERA; return true; } return false; } protected function checkBrowserChrome() { if( stripos($this->_agent,'Chrome') !== false ) { $aresult = explode('/',stristr($this->_agent,'Chrome')); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_CHROME); return true; } return false; } protected function checkBrowserWebTv() { if( stripos($this->_agent,'webtv') !== false ) { $aresult = explode('/',stristr($this->_agent,'webtv')); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_WEBTV); return true; } return false; } protected function checkBrowserNetPositive() { if( stripos($this->_agent,'NetPositive') !== false ) { $aresult = explode('/',stristr($this->_agent,'NetPositive')); $aversion = explode(' ',$aresult[1]); $this->setVersion(str_replace(array('(',')',';'),'',$aversion[0])); $this->setBrowser(self::BROWSER_NETPOSITIVE); return true; } return false; } protected function checkBrowserGaleon() { if( stripos($this->_agent,'galeon') !== false ) { $aresult = explode(' ',stristr($this->_agent,'galeon')); $aversion = explode('/',$aresult[0]); $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_GALEON); return true; } return false; } protected function checkBrowserKonqueror() { if( stripos($this->_agent,'Konqueror') !== false ) { $aresult = explode(' ',stristr($this->_agent,'Konqueror')); $aversion = explode('/',$aresult[0]); $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_KONQUEROR); return true; } return false; } protected function checkBrowserIcab() { if( stripos($this->_agent,'icab') !== false ) { $aversion = explode(' ',stristr(str_replace('/',' ',$this->_agent),'icab')); $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_ICAB); return true; } return false; } protected function checkBrowserOmniWeb() { if( stripos($this->_agent,'omniweb') !== false ) { $aresult = explode('/',stristr($this->_agent,'omniweb')); $aversion = explode(' ',isset($aresult[1])?$aresult[1]:""); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_OMNIWEB); return true; } return false; } protected function checkBrowserPhoenix() { if( stripos($this->_agent,'Phoenix') !== false ) { $aversion = explode('/',stristr($this->_agent,'Phoenix')); $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_PHOENIX); return true; } return false; } protected function checkBrowserFirebird() { if( stripos($this->_agent,'Firebird') !== false ) { $aversion = explode('/',stristr($this->_agent,'Firebird')); $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_FIREBIRD); return true; } return false; } protected function checkBrowserNetscapeNavigator9Plus() { if( stripos($this->_agent,'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i',$this->_agent,$matches) ) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); return true; } else if( stripos($this->_agent,'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i',$this->_agent,$matches) ) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); return true; } return false; } protected function checkBrowserShiretoko() { if( stripos($this->_agent,'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i',$this->_agent,$matches) ) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_SHIRETOKO); return true; } return false; } protected function checkBrowserIceCat() { if( stripos($this->_agent,'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i',$this->_agent,$matches) ) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_ICECAT); return true; } return false; } protected function checkBrowserNokia() { if( preg_match("/Nokia([^\/]+)\/([^ SP]+)/i",$this->_agent,$matches) ) { $this->setVersion($matches[2]); if( stripos($this->_agent,'Series60') !== false || strpos($this->_agent,'S60') !== false ) { $this->setBrowser(self::BROWSER_NOKIA_S60); } else { $this->setBrowser( self::BROWSER_NOKIA ); } $this->setMobile(true); return true; } return false; } protected function checkBrowserFirefox() { if( stripos($this->_agent,'safari') === false ) { if( preg_match("/Firefox[\/ \(]([^ ;\)]+)/i",$this->_agent,$matches) ) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_FIREFOX); return true; } else if( preg_match("/Firefox$/i",$this->_agent,$matches) ) { $this->setVersion(""); $this->setBrowser(self::BROWSER_FIREFOX); return true; } } return false; } protected function checkBrowserIceweasel() { if( stripos($this->_agent,'Iceweasel') !== false ) { $aresult = explode('/',stristr($this->_agent,'Iceweasel')); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_ICEWEASEL); return true; } return false; } protected function checkBrowserMozilla() { if( stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9].[0-9][ab]?/i',$this->_agent) && stripos($this->_agent,'netscape') === false) { $aversion = explode(' ',stristr($this->_agent,'rv:')); preg_match('/rv:[0-9].[0-9][ab]?/i',$this->_agent,$aversion); $this->setVersion(str_replace('rv:','',$aversion[0])); $this->setBrowser(self::BROWSER_MOZILLA); return true; } else if( stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i',$this->_agent) && stripos($this->_agent,'netscape') === false ) { $aversion = explode('',stristr($this->_agent,'rv:')); $this->setVersion(str_replace('rv:','',$aversion[0])); $this->setBrowser(self::BROWSER_MOZILLA); return true; } else if( stripos($this->_agent,'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i',$this->_agent,$matches) && stripos($this->_agent,'netscape') === false ) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_MOZILLA); return true; } return false; } protected function checkBrowserLynx() { if( stripos($this->_agent,'lynx') !== false ) { $aresult = explode('/',stristr($this->_agent,'Lynx')); $aversion = explode(' ',(isset($aresult[1])?$aresult[1]:"")); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_LYNX); return true; } return false; } protected function checkBrowserAmaya() { if( stripos($this->_agent,'amaya') !== false ) { $aresult = explode('/',stristr($this->_agent,'Amaya')); $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_AMAYA); return true; } return false; } protected function checkBrowserSafari() { if( stripos($this->_agent,'Safari') !== false && stripos($this->_agent,'iPhone') === false && stripos($this->_agent,'iPod') === false ) { $aresult = explode('/',stristr($this->_agent,'Version')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } $this->setBrowser(self::BROWSER_SAFARI); return true; } return false; } protected function checkBrowseriPhone() { if( stripos($this->_agent,'iPhone') !== false ) { $aresult = explode('/',stristr($this->_agent,'Version')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } $this->setMobile(true); $this->setBrowser(self::BROWSER_IPHONE); return true; } return false; } protected function checkBrowseriPad() { if( stripos($this->_agent,'iPad') !== false ) { $aresult = explode('/',stristr($this->_agent,'Version')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } $this->setMobile(true); $this->setBrowser(self::BROWSER_IPAD); return true; } return false; } protected function checkBrowseriPod() { if( stripos($this->_agent,'iPod') !== false ) { $aresult = explode('/',stristr($this->_agent,'Version')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } $this->setMobile(true); $this->setBrowser(self::BROWSER_IPOD); return true; } return false; } protected function checkBrowserAndroid() { if( stripos($this->_agent,'Android') !== false ) { $aresult = explode(' ',stristr($this->_agent,'Android')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } $this->setMobile(true); $this->setBrowser(self::BROWSER_ANDROID); return true; } return false; } /** * Determine the user's platform */ protected function checkPlatform() { if( stripos($this->_agent, 'windows') !== false ) { $this->_platform = self::PLATFORM_WINDOWS; } else if( stripos($this->_agent, 'iPad') !== false ) { $this->_platform = self::PLATFORM_IPAD; } else if( stripos($this->_agent, 'iPod') !== false ) { $this->_platform = self::PLATFORM_IPOD; } else if( stripos($this->_agent, 'iPhone') !== false ) { $this->_platform = self::PLATFORM_IPHONE; } elseif( stripos($this->_agent, 'mac') !== false ) { $this->_platform = self::PLATFORM_APPLE; } elseif( stripos($this->_agent, 'android') !== false ) { $this->_platform = self::PLATFORM_ANDROID; } elseif( stripos($this->_agent, 'linux') !== false ) { $this->_platform = self::PLATFORM_LINUX; } else if( stripos($this->_agent, 'Nokia') !== false ) { $this->_platform = self::PLATFORM_NOKIA; } else if( stripos($this->_agent, 'BlackBerry') !== false ) { $this->_platform = self::PLATFORM_BLACKBERRY; } elseif( stripos($this->_agent,'FreeBSD') !== false ) { $this->_platform = self::PLATFORM_FREEBSD; } elseif( stripos($this->_agent,'OpenBSD') !== false ) { $this->_platform = self::PLATFORM_OPENBSD; } elseif( stripos($this->_agent,'NetBSD') !== false ) { $this->_platform = self::PLATFORM_NETBSD; } elseif( stripos($this->_agent, 'OpenSolaris') !== false ) { $this->_platform = self::PLATFORM_OPENSOLARIS; } elseif( stripos($this->_agent, 'SunOS') !== false ) { $this->_platform = self::PLATFORM_SUNOS; } elseif( stripos($this->_agent, 'OS\/2') !== false ) { $this->_platform = self::PLATFORM_OS2; } elseif( stripos($this->_agent, 'BeOS') !== false ) { $this->_platform = self::PLATFORM_BEOS; } elseif( stripos($this->_agent, 'win') !== false ) { $this->_platform = self::PLATFORM_WINDOWS; } } } ?> 

在这里有一个很棒的function。

 <?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('/OPR/i',$u_agent)) { $bname = 'Opera'; $ub = "Opera"; } 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('/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); ?> 

使用get_browser() 函数 。

它可以给你这样的输出:

 Array ( [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$ [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9* [parent] => Firefox 0.9 [platform] => WinXP [browser] => Firefox [version] => 0.9 [majorver] => 0 [minorver] => 9 .... 
  • (Safari)和(Opera)和(Chrome)之间有冲突!

  • 以上代码无法正常工作

这是我的代码,它工作得很好,没有任何冲突:

 function ExactBrowserName() { $ExactBrowserNameUA=$_SERVER['HTTP_USER_AGENT']; if (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "opr/")) { // OPERA $ExactBrowserNameBR="Opera"; } elseIf (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "chrome/")) { // CHROME $ExactBrowserNameBR="Chrome"; } elseIf (strpos(strtolower($ExactBrowserNameUA), "msie")) { // INTERNET EXPLORER $ExactBrowserNameBR="Internet Explorer"; } elseIf (strpos(strtolower($ExactBrowserNameUA), "firefox/")) { // FIREFOX $ExactBrowserNameBR="Firefox"; } elseIf (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "opr/")==false and strpos(strtolower($ExactBrowserNameUA), "chrome/")==false) { // SAFARI $ExactBrowserNameBR="Safari"; } else { // OUT OF DATA $ExactBrowserNameBR="OUT OF DATA"; }; return $ExactBrowserNameBR; } 

使用51Degrees.com设备检测解决scheme来检测浏览器名称,供应商和版本。

首先,按照4步指南将设备检测器合并到您的项目中。 当我说合并我的意思是下载档案与PHP代码和数据库文件,提取它们,并包括2个文件。 这就是所有要做的合并。

完成之后,您可以使用以下属性获取浏览器信息:
$ _51d ['BrowserName'] – 给你的浏览器(Safari,Molto,摩托罗拉,MStarBrowser等)的名称。
$ _51d ['BrowserVendor'] – 给你创build浏览器的公司。
$ _51d ['BrowserVersion'] – 浏览器的版本号

@AlexV在这个页面有一个评论 ,这个评论是关于BrowserDetection的 。

我认为这是一个很好的课,值得自己回答。 我只是用它,像一个魅力(非常容易使用)。