首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 瀏覽器偵測類:解析 User-Agent 取得瀏覽器、作業系統與版本資訊

     編輯:PHP 相關知識

PHP 瀏覽器偵測類:解析 User-Agent 取得瀏覽器、作業系統與版本資訊

透過解析 $_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 = '';  // 次版本號
    // ...
}

核心解析邏輯

  1. 取得 HTTP_USER_AGENT,拆分括號前(瀏覽器資訊)與括號內(平台資訊)。
  2. 掃描平台關鍵字:Win、Mac/PPC、X11/SunOS/Linux。
  3. 識別瀏覽器關鍵字:MSIE、Opera、Mozilla(Netscape)、Lynx。
  4. 提取版本號並拆分主/次版本。

完整程式碼

<?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>";
?>

現代替代方案建議

  • 使用成熟函式庫如 jenssegers/agent(基於 ua-parser),準確度更高且持續更新。
  • 僅需簡單判斷時,可考慮 get_browser() 搭配 browscap.ini。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved