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

PHP 偵測瀏覽器類型與語言:HTTP_USER_AGENT 與 HTTP_ACCEPT_LANGUAGE 解析

     編輯:PHP 綜合知識

PHP 解析瀏覽器資訊實作

透過 $_SERVER['HTTP_USER_AGENT'] 識別瀏覽器類型、版本、作業系統;透過 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 判斷使用者偏好語言。可用於相容性處理、多語系導向、統計分析。

瀏覽器類型判斷函數

<?php
function getBrowserInfo() {
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
    $browser = 'Unknown';
    $version = '';

    // 依優先序匹配(順序重要,避免 Chrome 被誤判為 Safari)
    $patterns = [
        '/Edg\/([\d.]+)/i' => 'Edge',
        '/OPR\/([\d.]+)/i' => 'Opera',
        '/Chrome\/([\d.]+)/i' => 'Chrome',
        '/Firefox\/([\d.]+)/i' => 'Firefox',
        '/Safari\/([\d.]+)/i' => 'Safari',
        '/MSIE ([\d.]+)/i' => 'IE',
        '/Trident\/.*rv:([\d.]+)/i' => 'IE 11',
    ];

    foreach ($patterns as $pattern => $name) {
        if (preg_match($pattern, $ua, $matches)) {
            $browser = $name;
            $version = $matches[1] ?? '';
            break;
        }
    }

    // 作業系統判斷
    $os = 'Unknown';
    $osPatterns = [
        '/Windows NT 10\.0/i' => 'Windows 10',
        '/Windows NT 6\.3/i' => 'Windows 8.1',
        '/Windows NT 6\.2/i' => 'Windows 8',
        '/Windows NT 6\.1/i' => 'Windows 7',
        '/Mac OS X ([\d_]+)/i' => 'macOS',
        '/Linux/i' => 'Linux',
        '/Android ([\d.]+)/i' => 'Android',
        '/iPhone OS ([\d_]+)/i' => 'iOS',
    ];
    foreach ($osPatterns as $pattern => $name) {
        if (preg_match($pattern, $ua, $matches)) {
            $os = $name . ($matches[1] ? ' ' . str_replace('_', '.', $matches[1]) : '');
            break;
        }
    }

    return [
        'browser' => $browser,
        'version' => $version,
        'os' => $os,
        'ua' => $ua,
    ];
}

// 使用
$info = getBrowserInfo();
echo "{$info['browser']} {$info['version']} on {$info['os']}";

語言偏好判斷函數

<?php
function getPreferredLanguage() {
    $acceptLang = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '';
    if (!$acceptLang) return 'en'; // 預設英文

    // 解析 q-value 權重
    $langs = [];
    foreach (explode(',', $acceptLang) as $part) {
        $part = trim($part);
        $q = 1.0;
        if (strpos($part, ';q=') !== false) {
            list($lang, $qStr) = explode(';q=', $part);
            $q = (float)$qStr;
        } else {
            $lang = $part;
        }
        $lang = strtolower($lang);
        $langs[$lang] = $q;
    }
    arsort($langs); // 依權重遞減排序

    // 取最高權重的主要語言代碼(前兩字元)
    $topLang = key($langs);
    $primary = substr($topLang, 0, 2);

    // 對應繁簡中文
    $map = [
        'zh' => 'zh_TW', // 預設繁體,可依地區細分
        'zh-cn' => 'zh_CN',
        'zh-tw' => 'zh_TW',
        'zh-hk' => 'zh_HK',
        'en' => 'en_US',
        'ja' => 'ja_JP',
        'ko' => 'ko_KR',
    ];
    return $map[$topLang] ?? $map[$primary] ?? 'en_US';
}

// 使用
$lang = getPreferredLanguage();
// header("Location: /{$lang}/"); // 導向對應語系頁面

完整應用範例:多語系自動導向

<?php
session_start();

// 1. 優先使用使用者手動選擇
if (isset($_GET['lang'])) {
    $_SESSION['lang'] = $_GET['lang'];
}
// 2. 次優先使用 Session
elseif (isset($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
// 3. 再次優先偵測瀏覽器語言
else {
    $lang = getPreferredLanguage();
    $_SESSION['lang'] = $lang;
}

// 載入語系檔
$langFile = __DIR__ . "/lang/{$lang}.php";
if (file_exists($langFile)) {
    $translations = include $langFile;
} else {
    $translations = include __DIR__ . "/lang/en_US.php";
}

// 模板中使用:echo $translations['welcome'];
?>

注意事項

  • User-Agent 可被偽造,重要邏輯不可完全信任(如安全防護)。
  • 瀏覽器版本號可能包含多段(如 Chrome/120.0.6099.109),視需求取主版本號。
  • 語言偏好標頭格式複雜(zh-TW,zh;q=0.9,en-US;q=0.8),建議使用成熟庫(如 willdurand/negotiation)。
  • 行動裝置 UA 字串變化快,定期更新判斷規則或使用 piwik/device-detector。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved