透過解析 $_SERVER['HTTP_USER_AGENT'] 字串,可識別客戶端瀏覽器類型(IE、Firefox、Chrome、Opera、Safari 等)、作業系統(Windows、Mac、Linux、Unix)及版本號。本文提供一個可直接使用的 BrowserDetector 類別。
class BrowserDetector {
public $UA = ''; // 原始 User-Agent
public $BROWSER = 'Unknown';
public $PLATFORM = 'Unknown';
public $VERSION = '';
public $MAJORVER = ''; // 主版本號
public $MINORVER = ''; // 次版本號
// ...
}
HTTP_USER_AGENT,拆分括號前(瀏覽器資訊)與括號內(平台資訊)。Win、Mac/PPC、X11/SunOS/Linux。MSIE、Opera、Mozilla(Netscape)、Lynx。<?php
class BrowserDetector {
var $UA = "";
var $BROWSER= "Unknown";
var $PLATFORM = "Unknown";
var $VERSION= "";
var $MAJORVER = "";
var $MINORVER = "";
function BrowserDetector(){
$this->UA = getenv('HTTP_USER_AGENT');
$preparens = "";
$parens = "";
$i = strpos($this->UA,"(");
if ($i >= 0) {
$preparens = trim(substr($this->UA,0,$i));
$parens = substr($this->UA,$i+1,strlen($this->UA));
$j = strpos($parens,")");
if($j>=0) $parens = substr($parens,0,$j);
} else {
$preparens = $this->UA;
}
$browVer = $preparens;
$token = trim(strtok($parens,";"));
while($token) {
if($token=="compatible") { }
elseif(preg_match("/MSIE/i","$token")) { $browVer = $token; }
elseif(preg_match("/Opera/i","$token")) { $browVer = $token; }
elseif(preg_match("/X11/i","$token") || preg_match("/SunOS/i","$token") || preg_match("/Linux/i","$token")) { $this->PLATFORM = "Unix"; }
elseif(preg_match("/Win/i","$token")) { $this->PLATFORM = $token; }
elseif(preg_match("/Mac/i","$token") || preg_match("/PPC/i","$token")) { $this->PLATFORM = $token; }
$token = strtok(";");
}
$msieIndex = strpos($browVer,"MSIE");
if($msieIndex >= 0) $browVer = substr($browVer,$msieIndex,strlen($browVer));
$leftover = "";
if(substr($browVer,0,strlen("Mozilla")) == "Mozilla") { $this->BROWSER = "Netscape"; $leftover=substr($browVer,strlen("Mozilla")+1); }
elseif(substr($browVer,0,strlen("Lynx")) == "Lynx") { $this->BROWSER = "Lynx"; $leftover=substr($browVer,strlen("Lynx")+1); }
elseif(substr($browVer,0,strlen("MSIE")) == "MSIE") { $this->BROWSER = "IE"; $leftover=substr($browVer,strlen("MSIE")+1); }
elseif(substr($browVer,0,strlen("Microsoft Internet Explorer")) == "Microsoft Internet Explorer") { $this->BROWSER = "IE"; $leftover=substr($browVer,strlen("Microsoft Internet Explorer")+1); }
elseif(substr($browVer,0,strlen("Opera")) == "Opera") { $this->BROWSER = "Opera"; $leftover=substr($browVer,strlen("Opera")+1); }
$leftover = trim($leftover);
$i=strpos($leftover," ");
$this->VERSION = ($i > 0) ? substr($leftover,0,$i) : $leftover;
$j = strpos($this->VERSION,".");
if($j >= 0) { $this->MAJORVER = substr($this->VERSION,0,$j); $this->MINORVER = substr($this->VERSION,$j+1); }
else { $this->MAJORVER = $this->VERSION; }
}
}
// 測試
$test = new BrowserDetector();
echo "UA: {$test->UA}<br>";
echo "Browser: {$test->BROWSER}<br>";
echo "Platform: {$test->PLATFORM}<br>";
echo "Version: {$test->VERSION}<br>";
echo "Major: {$test->MAJORVER}<br>";
echo "Minor: {$test->MINORVER}<br>";
?>
ua-parser),準確度更高且持續更新。get_browser() 搭配 browscap.ini。