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

PHP 精準判斷行動裝置存取:完整 User-Agent 解析函式庫

     編輯:PHP 相關知識

隨著行動流量超越桌面,精準識別行動裝置成為響應式設計、行動版導向、廣告投放等場景的基礎需求。本文提供一個生產級的 isMobile() 函式,涵蓋 HTTP 標頭、User-Agent 關鍵字、Accept 協議三層檢測邏輯,並說明優化方向。

核心檢測邏輯(四層遞進)

  1. HTTP_X_WAP_PROFILE:WAP 瀏覽器專用標頭,極高可信度
  2. HTTP_VIA 含 wap:代理伺服器標識,部分運營商會過濾
  3. User-Agent 關鍵字匹配:覆蓋主流品牌、作業系統、瀏覽器關鍵字
  4. HTTP_Accept 協議分析:WML 優先於 HTML 判定為行動裝置

完整函式碼(可直接部署)

/**
 * 判斷是否為行動裝置存取
 * @return bool
 */
function isMobile(): bool
{
    // 1. WAP Profile 標頭(最高優先級)
    if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
        return true;
    }

    // 2. Via 標頭包含 wap
    if (isset($_SERVER['HTTP_VIA']) && stripos($_SERVER['HTTP_VIA'], 'wap') !== false) {
        return true;
    }

    // 3. User-Agent 關鍵字匹配
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
        $keywords = [
            // 品牌
            'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp',
            'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod',
            'blackberry', 'meizu', 'xiaomi', 'huawei', 'oppo', 'vivo', 'oneplus',
            // 作業系統/平台
            'android', 'ios', 'ipados', 'windows phone', 'windows ce', 'palm', 'symbian',
            'blackberry', 'webos', 'bada', 'tizen', 'kaios',
            // 瀏覽器/引擎
            'netfront', 'ucweb', 'ucbrowser', 'mobile safari', 'mobile chrome',
            'firefox mobile', 'opera mini', 'opera mobi', 'openwave', 'nexus',
            // 技術標識
            'cldc', 'midp', 'wap', 'mobile', 'micro messenger', 'micromessenger'
        ];
        $pattern = '/(' . implode('|', array_map('preg_quote', $keywords)) . ')/i';
        if (preg_match($pattern, $ua)) {
            return true;
        }
    }

    // 4. Accept 協議分析
    if (isset($_SERVER['HTTP_ACCEPT'])) {
        $accept = strtolower($_SERVER['HTTP_ACCEPT']);
        $wmlPos = strpos($accept, 'vnd.wap.wml');
        $htmlPos = strpos($accept, 'text/html');
        if ($wmlPos !== false && ($htmlPos === false || $wmlPos < $htmlPos)) {
            return true;
        }
    }

    return false;
}

使用範例

if (isMobile()) {
    // 重導向至行動版
    header('Location: https://m.example.com');
    exit;
}

// 或載入行動版模板
$template = isMobile() ? 'mobile/index.tpl' : 'desktop/index.tpl';

進階優化建議

方向說明
引入成熟函式庫Mobile_Detect:支援平板、機器人、特定裝置型號識別,定期更新 UA 資料庫
快取判斷結果同一 Session 僅判斷一次,儲存於 $_SESSION['is_mobile']
結合響應式設計CSS Media Queries 為主,PHP 判斷為輔(如行動版專用 API、廣告位)
處理偽裝 UA部分爬蟲/工具偽裝行動 UA,可結合 HTTP_X_REQUESTED_WITH、行為分析二次驗證
平板電腦區分擴充關鍵字 ipad、tablet、kindle,返回三態:desktop / mobile / tablet

效能考量

  • 關鍵字陣列靜態化,避免每次呼叫重建
  • 正則預編譯:static $pattern = null; if ($pattern === null) $pattern = ...
  • 早期返回:高可信度標頭優先檢查

局限性提醒

  • User-Agent 可被竄改,非絕對可信
  • 新裝置/瀏覽器持續出現,關鍵字庫需定期維護
  • 響應式網頁設計(RWD)已減少伺服端判斷需求

建議:新專案優先採用 Mobile_Detect 等成熟套件,僅在無 Composer 環境、極簡專案中使用輕量自訂函式。核心邏輯保持「標頭優先、UA 次之、協議輔助」的分層策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved