【问题标题】:How to detect Safari (Iphone) browser In php?如何在 php 中检测 Safari (Iphone) 浏览器?
【发布时间】:2023-01-18 00:34:25
【问题描述】:

我正在尝试使用 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,为 mobile browser 返回 mobile browser,但不为 safari 返回。有没有办法检测Safari(Iphone)浏览器?

欢迎任何人分享与此相关的任何知识/帮助。

【问题讨论】:

    标签: php safari user-agent w3c


    【解决方案1】:

    您需要缩短循环,以便它在找到匹配值后立即退出:

    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';
    

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

    【讨论】:

    • 谢谢,我试过你的建议,my code 但现在它只返回 safari
    • 我的意思是它不起作用。它在所有浏览器上返回 safari
    • 编辑您的问题并发布函数的更新版本。
    • 它为 chrome 返回 chrome,为移动浏览器返回移动浏览器,但不为 safari 返回
    • 为您的 IOS Safari 发布完整的用户代理字符串。
    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 2011-04-19
    • 2012-09-19
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2013-03-03
    • 2012-04-08
    相关资源
    最近更新 更多