響應式設計雖然普及,但某些情境仍需在伺服器端判斷裝置類型(如載入不同 CSS、導向專屬版面、統計流量來源)。以下提供一個經過測試的 PHP 偵測函式,可區分桌機與行動裝置。
<?php
function check_wap() {
// 1. 檢查常見的 Proxy/閘道標頭
if (isset($_SERVER['HTTP_VIA'])) return true;
if (isset($_SERVER['HTTP_X_NOKIA_CONNECTION_MODE'])) return true;
if (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID'])) return true;
// 2. 檢查 Accept 標頭是否包含 WML
if (strpos(strtoupper($_SERVER['HTTP_ACCEPT']), "VND.WAP.WML") !== false) {
return true;
}
// 3. 分析 User-Agent
$browser = isset($_SERVER['HTTP_USER_AGENT']) ? trim($_SERVER['HTTP_USER_AGENT']) : '';
if (empty($browser)) return true; // 無 UA 視為行動裝置
// 作業系統關鍵字
$mobile_os_list = array(
'Google Wireless Transcoder', 'Windows CE', 'WindowsCE', 'Symbian',
'Android', 'armv6l', 'armv5', 'Mobile', 'CentOS', 'mowser',
'AvantGo', 'Opera Mobi', 'J2ME/MIDP', 'Smartphone', 'Go.Web',
'Palm', 'iPAQ'
);
// 裝置/瀏覽器特徵關鍵字
$mobile_token_list = array(
'Profile/MIDP', 'Configuration/CLDC-', '160×160', '176×220',
'240×240', '240×320', '320×240', 'UP.Browser', 'UP.Link',
'SymbianOS', 'PalmOS', 'PocketPC', 'SonyEricsson', 'Nokia',
'BlackBerry', 'Vodafone', 'BenQ', 'Novarra-Vision', 'Iris',
'NetFront', 'HTC_', 'Xda_', 'SAMSUNG-SGH', 'Wapaka', 'DoCoMo',
'iPhone', 'iPod'
);
$found_mobile = checkSubstrs($mobile_os_list, $browser) ||
checkSubstrs($mobile_token_list, $browser);
return $found_mobile;
}
function checkSubstrs($list, $str) {
foreach ($list as $keyword) {
if (strpos($str, $keyword) !== false) {
return true;
}
}
return false;
}
// 使用範例
if (check_wap()) {
echo "wap"; // 行動裝置
} else {
echo "web"; // 桌機
}
?>
Mobile_Detect)以獲得更完整、維護性更佳的偵測能力。透過分析 HTTP 標頭與 User-Agent 字串,PHP 即可在伺服器端可靠地辨識訪客裝置類型,為差異化內容呈現提供決策依據。