透過分析 $_SERVER['HTTP_USER_AGENT'] 字串,使用關鍵字比對與字串切割提取瀏覽器名稱與版本。本函數支援識別 IE、Firefox (Netscape)、Opera、Chrome、Safari 等主流瀏覽器,並回傳格式化字串如 Internet Explorer 11.0。
<?php
function get_browser_info() {
$agent = $_SERVER['HTTP_USER_AGENT'];
$browser = '';
$version = '';
// 1. 明確關鍵字優先判斷
if (stripos($agent, 'Edge/') !== false) {
$browser = 'Microsoft Edge';
preg_match('/Edge\/([\d.]+)/', $agent, $m);
$version = $m[1] ?? '';
} elseif (stripos($agent, 'Chrome/') !== false && stripos($agent, 'Edg/') === false) {
$browser = 'Google Chrome';
preg_match('/Chrome\/([\d.]+)/', $agent, $m);
$version = $m[1] ?? '';
} elseif (stripos($agent, 'Firefox/') !== false) {
$browser = 'Mozilla Firefox';
preg_match('/Firefox\/([\d.]+)/', $agent, $m);
$version = $m[1] ?? '';
} elseif (stripos($agent, 'MSIE') !== false || stripos($agent, 'Trident/') !== false) {
$browser = 'Internet Explorer';
if (preg_match('/MSIE ([\d.]+)/', $agent, $m)) {
$version = $m[1];
} elseif (preg_match('/rv:([\d.]+)/', $agent, $m)) { // IE11
$version = $m[1];
}
} elseif (stripos($agent, 'Opera/') !== false || stripos($agent, 'OPR/') !== false) {
$browser = 'Opera';
preg_match('/(?:Opera|OPR)\/([\d.]+)/', $agent, $m);
$version = $m[1] ?? '';
} elseif (stripos($agent, 'Safari/') !== false && stripos($agent, 'Chrome/') === false) {
$browser = 'Apple Safari';
preg_match('/Version\/([\d.]+)/', $agent, $m);
$version = $m[1] ?? '';
} else {
// 其它瀏覽器嘗試通用解析
if (preg_match('/([a-zA-Z]+)\/([\d.]+)/', $agent, $m)) {
$browser = $m[1];
$version = $m[2];
}
}
return $browser . ($version ? ' ' . $version : '');
}
// 使用範例
echo get_browser_info();
// 可能輸出:Google Chrome 119.0.6045.105
?>
ereg、split 等函數,已全面改用 preg_match、stripos。false,方便前端直接輸出。生產環境建議使用成熟函式庫如 UserAgentParser 或 PHP 內建 get_browser()(需 browscap.ini),可獲得裝置類型、作業系統、引擎版本等豐富資訊。