如何在PHP中检测iPhone端Safari浏览器?
如何检测iPhone端的Safari浏览器
你的代码问题出在正则匹配的顺序上:iPhone端Safari的User-Agent字符串同时包含safari和mobile关键词,而你的循环是按顺序匹配,最后匹配到mobile时会覆盖之前识别出的Safari,导致最终返回Mobile browser。
另外需要注意:iOS平台上的Chrome浏览器的UA也会包含safari关键词,所以要额外排除这种情况,避免误判。
修改后的代码如下:
<?php ob_start(); session_start(); function getBrowser() { $user_agent = $_SERVER['HTTP_USER_AGENT']; $browser = "N/A"; // 调整顺序,先检测特殊情况,再检测通用情况 $browsers = [ '/msie/i' => 'Internet explorer', '/firefox/i' => 'Firefox', '/chrome/i' => 'Chrome', '/edge/i' => 'Edge', '/opera/i' => 'Opera', // 优先检测iPhone/iPad/iPod上的Safari,排除Chrome干扰 '/(iPhone|iPad|iPod).*safari/i' => 'iPhone/iPad Safari', '/safari/i' => 'Safari', '/mobile/i' => 'Mobile browser', ]; foreach ($browsers as $regex => $value) { if (preg_match($regex, $user_agent)) { $browser = $value; // 匹配到即跳出循环,避免被后续规则覆盖 break; } } return $browser; } $agent = getBrowser(); echo $agent; ?>
关键修改点:
- 调整正则顺序:把移动端Safari的检测放在通用Safari之前,精准匹配iOS设备上的Safari
- 匹配后立即
break循环:防止后续的正则规则覆盖当前识别结果 - 区分iOS Chrome与Safari:避免把iOS Chrome误判为Safari
内容的提问来源于stack exchange,提问作者Hary Hillary
相关产品推荐
相关产品推荐

