<?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 關鍵字 |
|---|---|
| IE 6-10 | MSIE x.y |
| IE 11 | Trident/7.0; rv:11.0 (無 MSIE) |
| Edge (Legacy) | Edge/xx.x |
| Edge (Chromium) | Edg/xx.x (含 Chrome UA) |
<?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>
ua-parser,準確度高)// 使用 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'
preg_match('/MSIE|Trident\/7\.0.*rv:11/', $ua)detectBrowser() 或成熟庫