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

PHP 偵測 IE 瀏覽器完整指南:User-Agent 解析與現代替代方案

     編輯:PHP 綜合知識

傳統作法:偵測 MSIE 關鍵字

<?php
function chkIeBrowser(): bool
{
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
    // IE 10 及以下包含 "MSIE"
    // IE 11 移除 MSIE,改為 "Trident/7.0; rv:11.0"
    return (bool)preg_match('/MSIE|Trident\/7\.0.*rv:11/', $ua);
}

// 使用範例
if (chkIeBrowser()) {
    echo '偵測到 IE 瀏覽器,建議升級至 Edge 或 Chrome';
}
?>

User-Agent 變遷史

版本User-Agent 關鍵字
IE 6-10MSIE x.y
IE 11Trident/7.0; rv:11.0 (無 MSIE)
Edge (Legacy)Edge/xx.x
Edge (Chromium)Edg/xx.x (含 Chrome UA)

完整偵測函數 (支援所有 IE/Edge 版本)

<?php
function detectBrowser(string $ua = ''): array
{
    $ua = $ua ?: ($_SERVER['HTTP_USER_AGENT'] ?? '');
    $result = ['name' => 'Unknown', 'version' => '0', 'engine' => ''];

    // IE 11
    if (preg_match('/Trident\/7\.0.*rv:(\d+)/', $ua, $m)) {
        return ['name' => 'Internet Explorer', 'version' => $m[1], 'engine' => 'Trident'];
    }
    // IE 6-10
    if (preg_match('/MSIE (\d+)/', $ua, $m)) {
        return ['name' => 'Internet Explorer', 'version' => $m[1], 'engine' => 'Trident'];
    }
    // Edge Legacy
    if (preg_match('/Edge\/(\d+)/', $ua, $m)) {
        return ['name' => 'Edge (Legacy)', 'version' => $m[1], 'engine' => 'EdgeHTML'];
    }
    // Edge Chromium
    if (preg_match('/Edg\/(\d+)/', $ua, $m)) {
        return ['name' => 'Edge', 'version' => $m[1], 'engine' => 'Blink'];
    }
    // Chrome
    if (preg_match('/Chrome\/(\d+)/', $ua, $m)) {
        return ['name' => 'Chrome', 'version' => $m[1], 'engine' => 'Blink'];
    }
    // Firefox
    if (preg_match('/Firefox\/(\d+)/', $ua, $m)) {
        return ['name' => 'Firefox', 'version' => $m[1], 'engine' => 'Gecko'];
    }
    // Safari
    if (preg_match('/Version\/(\d+).*Safari/', $ua, $m)) {
        return ['name' => 'Safari', 'version' => $m[1], 'engine' => 'WebKit'];
    }

    return $result;
}

// 使用
$browser = detectBrowser();
if ($browser['name'] === 'Internet Explorer') {
    // 輸出升級提示或載入 Polyfill
}
?>

現代最佳實務:特性偵測取代瀏覽器偵測

不要依賴 UA 字串判斷功能支援度,改用 JavaScript 特性偵測:

<!-- HTML 條件註解 (僅 IE 10 以下支援) -->
<!--[if lte IE 9]>
    <script src="polyfill.js"></script>
<![endif]-->

<!-- JavaScript 特性偵測範例 -->
<script>
if (!('fetch' in window)) {
    // 載入 fetch polyfill
    var script = document.createElement('script');
    script.src = 'https://cdn.jsdelivr.net/npm/unfetch@4.2.0/dist/unfetch.umd.js';
    document.head.appendChild(script);
}
</script>

伺服器端應用場景

  • 統計分析:記錄瀏覽器分布,決定支援策略
  • 相容性回應:針對舊版 IE 回傳簡化版 CSS/JS
  • 安全防護:封鎖已知惡意爬蟲 UA (但 UA 易偽造,需配合其他手段)

推薦工具庫

// 使用 jenssegers/agent (Composer: composer require jenssegers/agent)
use Jenssegers\Agent\Agent;
$agent = new Agent();
$agent->is('Internet Explorer'); // true/false
$agent->browser();               // 'Internet Explorer'
$agent->version($agent->browser()); // '11.0'
$agent->platform();              // 'Windows'
$agent->device();                // 'Desktop'

總結

  1. 單純偵測 IE:preg_match('/MSIE|Trident\/7\.0.*rv:11/', $ua)
  2. 需詳細版本/引擎資訊:使用 detectBrowser() 或成熟庫
  3. 前端功能相容:永遠優先使用特性偵測
  4. UA 字串可被偽造,**不可用於安全驗證**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved