如何在php中检测Safari(iPhone)浏览器?

aelbi1ox  于 2023-01-19  发布在  PHP
关注(0)|答案(1)|浏览(190)

我正在尝试使用w3docs中描述的方法检测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',
     '/safari/i' => 'Safari',
     '/chrome/i' => 'Chrome',
     '/edge/i' => 'Edge',
     '/opera/i' => 'Opera',
     '/mobile/i' => 'Mobile browser',
   ];

   foreach ($browsers as $regex => $value) {
     if (preg_match($regex, $user_agent)) {
       $browser = $value;
     }
   }

   return $browser;
 }
 $agent = getBrowser();
echo $agent;
?>

它为Chrome返回Chrome,为手机浏览器返回移动的浏览器,但不为Safari返回,难道没有办法检测Safari(iPhone)浏览器吗?
任何人都欢迎分享有关这方面的任何知识/帮助。

bjp0bcyl

bjp0bcyl1#

您需要简化循环,以便它在找到匹配值时立即退出:

foreach ($browsers as $regex => $value) {
    if (preg_match($regex, $user_agent)) {
        return $value;
    }
}

如果找不到任何内容,您可能需要一个默认值:

foreach ($browsers as $regex => $value) {
    if (preg_match($regex, $user_agent)) {
        return $value;
    }
}
return 'unknown';

否则,每次都将遍历整个列表,并且(可能)总是匹配最后一个“移动的”,因为它也可能出现在字符串中。

相关问题