HTTP 請求標頭中,`User-Agent` 描述客戶端瀏覽器資訊,`Accept-Language` 指出用戶偏好語言順序。PHP 透過 `$_SERVER` 超全域陣列即可存取這兩個值,配合字串搜尋或正則比對,即可實現基礎偵測。
<?php
// 瀏覽器完整 User-Agent 字串
echo $_SERVER['HTTP_USER_AGENT'] ?? '未提供';
// 語言偏好標頭(如 zh-TW,zh;q=0.9,en-US;q=0.8)
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '未提供';
<?php
function detectBrowser(string $ua): string
{
// 順序很重要:Chrome 的 UA 含 Safari,故 Chrome 必須先判斷
if (str_contains($ua, 'Edg/')) return 'Microsoft Edge';
if (str_contains($ua, 'Chrome/')) return 'Google Chrome';
if (str_contains($ua, 'Firefox/')) return 'Mozilla Firefox';
if (str_contains($ua, 'Safari/')) return 'Apple Safari';
if (str_contains($ua, 'MSIE') || str_contains($ua, 'Trident/')) return 'Internet Explorer';
if (str_contains($ua, 'Opera/') || str_contains($ua, 'OPR/')) return 'Opera';
return 'Unknown';
}
// 使用
$browser = detectBrowser($_SERVER['HTTP_USER_AGENT'] ?? '');
echo "偵測到瀏覽器:$browser";
注意:PHP 8+ 可用 `str_contains()`,舊版請用 `strpos() !== false`。真實專案建議使用成熟函式庫(如 Jenssegers/Agent 或 piwik/device-detector),涵蓋裝置、作業系統、爬蟲等完整資訊。
標頭格式範例:zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7
權重 `q` 值範圍 0~1,預設 1。應依權重排序,取最高者。
<?php
function parseAcceptLanguage(string $header): array
{
$langs = [];
foreach (explode(',', $header) as $part) {
$part = trim($part);
$q = 1.0;
if (strpos($part, ';q=') !== false) {
[$tag, $qv] = explode(';q=', $part, 2);
$q = (float)$qv;
$part = $tag;
}
$part = strtolower(trim($part));
if ($part) $langs[$part] = $q;
}
arsort($langs); // 依權重遞減
return $langs;
}
function getPreferredLanguage(array $supported = ['zh-tw','zh-cn','en']): string
{
$header = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '';
$prefs = parseAcceptLanguage($header);
foreach ($prefs as $lang => $q) {
// 精確匹配
if (in_array($lang, $supported, true)) return $lang;
// 語系匹配(如 zh-tw -> zh)
$primary = explode('-', $lang)[0];
if (in_array($primary, $supported, true)) return $primary;
}
return $supported[0]; // 預設回退
}
// 使用
$lang = getPreferredLanguage(['zh-tw', 'zh-cn', 'en', 'ja', 'ko']);
echo "建議語言:$lang";
透過 `$_SERVER['HTTP_USER_AGENT']` 與 `$_SERVER['HTTP_ACCEPT_LANGUAGE']` 即可實現基礎偵測,但生產環境強烈建議採用維護中的解析函式庫,並謹記偵測結果僅供參考,不可作為信任依據。