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

我已经尝试了一些解决方案,但我不能得到确切的名称和版本:

我正在尝试以下代码:

$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

因此,我可以在 Chrome/11.0.696.68中找到输出字符串,但它也显示了一些其他浏览器的名称,这是混淆提取确切的浏览器 名称/版本从字符串。

237122 次浏览

使用 强 > 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] =>
)

使用 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
....

这个 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);

我想向你们推荐这门很棒的课程,这门课对我来说非常有效。

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,.,a-z,A-Z-]/','',$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,.,a-z,A-Z]/','',$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\.a-z]/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][a-b]?/i',$this->_agent) && stripos($this->_agent,'netscape') === false) {
$aversion = explode(' ',stristr($this->_agent,'rv:'));
preg_match('/rv:[0-9].[0-9][a-b]?/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;
}


}
}
?>
  • (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 设备检测解决方案来检测浏览器名称、供应商和版本。

首先,按照 四步指南将设备检测器合并到项目中。当我说合并,我的意思是下载与 PHP 代码和数据库文件归档,解压缩他们,包括2个文件。这就是合并的全部内容。

完成后,您可以使用以下属性获取浏览器信息:
$_ 51d [‘ BrowserName’] -给出浏览器名称(Safari、 Molto、 Motorola、 MStarBrowser 等)。
$_ 51d [‘ BrowserVendor’] -提供创建浏览器的公司。
$_ 51d [‘ BrowserVersion’] -浏览器的版本号

得到 太棒了函数 给你

<?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) && !preg_match('/Edge/i',$u_agent)){
$bname = 'Google Chrome';
$ub = "Chrome";
}elseif(preg_match('/Safari/i',$u_agent) && !preg_match('/Edge/i',$u_agent)){
$bname = 'Apple Safari';
$ub = "Safari";
}elseif(preg_match('/Netscape/i',$u_agent)){
$bname = 'Netscape';
$ub = "Netscape";
}elseif(preg_match('/Edge/i',$u_agent)){
$bname = 'Edge';
$ub = "Edge";
}elseif(preg_match('/Trident/i',$u_agent)){
$bname = 'Internet Explorer';
$ub = "MSIE";
}


// 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);
?>

我用 PHP 语言创建了一个函数来获取浏览器名称、浏览器版本、操作系统(windows/linux 等)以及设备类型(桌面/移动/平板)。

function getBrowserInfo(){
$browserInfo = array('user_agent'=>'','browser'=>'','browser_version'=>'','os_platform'=>'','pattern'=>'', 'device'=>'');


$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$ub = 'Unknown';
$version = "";
$platform = 'Unknown';


$deviceType='Desktop';


if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$u_agent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($u_agent,0,4))){


$deviceType='Mobile';


}


if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10') {
$deviceType='Tablet';
}


if(stristr($_SERVER['HTTP_USER_AGENT'], 'Mozilla/5.0(iPad;')) {
$deviceType='Tablet';
}


//$detect = new Mobile_Detect();
    

//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 user agent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'IE';
$ub = "MSIE";


} else if(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";


} else if(preg_match('/Chrome/i',$u_agent) && (!preg_match('/Opera/i',$u_agent) && !preg_match('/OPR/i',$u_agent)))
{
$bname = 'Chrome';
$ub = "Chrome";


} else if(preg_match('/Safari/i',$u_agent) && (!preg_match('/Opera/i',$u_agent) && !preg_match('/OPR/i',$u_agent)))
{
$bname = 'Safari';
$ub = "Safari";


} else if(preg_match('/Opera/i',$u_agent) || preg_match('/OPR/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";


} else if(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";


} else if((isset($u_agent) && (strpos($u_agent, 'Trident') !== false || strpos($u_agent, 'MSIE') !== false)))
{
$bname = 'Internet Explorer';
$ub = 'Internet Explorer';
}
    



// 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(
'user_agent' => $u_agent,
'browser'      => $bname,
'browser_version'   => $version,
'os_platform'  => $platform,
'pattern'   => $pattern,
'device'    => $deviceType
);
}

这解决了我的浏览器检测问题,希望对你也有帮助。谢谢。

由于一些代码给了 Edge 和 Opera 错误的结果,我建议尝试下面的代码:

$popularBrowsers = ["Opera","OPR/", "Edg", "Chrome", "Safari", "Firefox", "MSIE", "Trident"];


$userAgent = $_SERVER['HTTP_USER_AGENT'];
$userBrowser = 'Other less popular browsers';
foreach ($popularBrowsers as $browser) {
if (strpos($userAgent, $browser) !== false) {
$userBrowser = $browser;
break;
}
}


switch ($userBrowser) {
case 'OPR/':
$userBrowser = 'Opera';
break;
case 'MSIE':
$userBrowser = 'Internet Explorer';
break;


case 'Trident':
$userBrowser = 'Internet Explorer';
break;


case 'Edg':
$userBrowser = 'Microsoft Edge';
break;
}


echo "Your browser: " . $userBrowser;

有关不同浏览器的代理字符串及其相似之处的信息,请参阅: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

得到这个函数 给你和更新。它与边缘浏览器工作。

<?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) && !preg_match('/Edg/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent) && !preg_match('/Edg/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
elseif(preg_match('/Edg/i',$u_agent))
{
$bname = 'Edge';
$ub = "Edg";
}
elseif(preg_match('/Trident/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}


// 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 [
'userAgent' => $u_agent,
'name'      => $bname,
'version'   => $version,
'platform'  => $platform,
'pattern'    => $pattern
];
}


// invoke function
$arBrowser =  getBrowser();
echo '<pre>';
print_r($arBrowser);
echo '</pre>';
?>