<? if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false): ?>
<!-- 這裡放廣告碼、IE 專用 CSS/JS、Polyfill 等 -->
<script src="/assets/js/ie-polyfills.js"></script>
<? endif; ?>
<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false): ?>
<!-- IE 專用內容 -->
<?php endif; ?>
MSIE 關鍵字僅存在於 IE 10 及更舊版本。IE 11 的 UA 字串為 Trident/7.0; rv:11.0,**不含 MSIE**。<?php
/**
* 偵測 IE / Edge Legacy
* @return array ['is_ie'=>bool, 'version'=>int|null, 'engine'=>string]
*/
function detectIE(): array
{
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
// IE 10 及更舊
if (preg_match('/MSIE\s([0-9.]+)/', $ua, $m)) {
return ['is_ie' => true, 'version' => (int)$m[1], 'engine' => 'MSIE'];
}
// IE 11
if (strpos($ua, 'Trident/') !== false && preg_match('/rv:(\d+)/', $ua, $m)) {
return ['is_ie' => true, 'version' => (int)$m[1], 'engine' => 'Trident'];
}
// Edge Legacy (EdgeHTML)
if (preg_match('/Edge\/(\d+)/', $ua, $m)) {
return ['is_ie' => false, 'version' => (int)$m[1], 'engine' => 'EdgeHTML'];
}
return ['is_ie' => false, 'version' => null, 'engine' => 'Other'];
}
// 使用
$browser = detectIE();
if ($browser['is_ie']) {
echo "<!-- IE {$browser['version']} 專用內容 -->";
}
**伺服器端 UA 判斷本質脆弱**(UA 可偽造、瀏覽器更新快、維護成本高)。前端採用以下方案:
<!-- 現代瀏覽器載入現代樣式 -->
<link rel="stylesheet" href="/css/modern.css" media="not all and (pointer: coarse)">
<!-- 舊版 IE 載入 fallback(IE 不支援 media query 的某些語法) -->
<!--[if IE]>
<link rel="stylesheet" href="/css/ie-fallback.css">
<![endif]-->
<script>
// 檢測功能而非瀏覽器
if (!Element.prototype.closest) {
// 載入 Polyfill
document.write('<script src="/polyfills/closest.js"><\/script>');
}
// 或使用現代模組化載入
import('/polyfills/fetch.js').then(() => {
// fetch 可用
});
<script src="https://polyfill.io/v3/polyfill.min.js?features=fetch,Promise,Object.assign"></script>
<!--[if IE]>
<p>您正在使用已淘汰的 Internet Explorer,請升級至 Edge、Chrome 或 Firefox。</p>
<![endif]-->
strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE')` 僅能偵測 **IE 10 及更舊版本**。