【问题标题】:Php : Finding Chrome and Safari BrowsersPHP : 查找 Chrome 和 Safari 浏览器
【发布时间】:2013-02-22 16:53:56
【问题描述】:

我使用下面的代码来查找用户代理,

    $user_agent = $_SERVER['HTTP_USER_AGENT']; 
    if (preg_match('/MSIE/i', $user_agent)) { 
       echo "Internet Explorer";
    }
    if (preg_match('/Firefox/i', $user_agent)) { 
       echo "FireFox";
    }
    if (strpos( $user_agent, 'Chrome') !== false)
    {
        echo "Google Chrome";
    }
    if (strpos( $user_agent, 'Safari') !== false)
    {
       echo "Safari";
    }
    if (preg_match('/Opera/i', $user_agent)) { 
       echo "Opera";
    }

    ?>

但是我的 chrome 浏览器突然返回到 useragent 下面

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.155 Safari/537.22

它包含单词 safari 和 chrome.so 两个浏览器名称都被打印出来。this.thanks 的解决方案是什么。

【问题讨论】:

  • 解决方案几乎总是“停止关心浏览器是什么”
  • 我猜这与两个浏览器都使用WebKit 布局引擎这一事实有关。您应该研究特征检测,因为浏览器检测是不可靠的。您应该考虑progressive enhancement 的想法,您可以在其中创建所有浏览器都可以使用的基本功能,并为支持其他功能(即功能检测)的浏览器扩展该功能。
  • 要跟进@Quentin 的评论,请始终问自己为什么您的服务器需要知道浏览器是什么。我了解在客户端使用特征检测,但我不明白为什么您需要在服务器上知道这一点。
  • @ColinMorelli 这里有一个想法......如果你想动态包含你只想在某些浏览器上执行的javascript(初学者的功能检测)怎么办?这样您就可以在不需要时节省往返行程(我的意思是,大多数库无论如何都允许您动态加载 js,但是 shhhhh)
  • @jcolebrand 因为它是微软。 '纳夫说。 :)

标签: php user-agent


【解决方案1】:

Chrome 的用户代理包含Safari,但 Safari 的用户代理不包含Chrome,所以使用if ... elseif

if (stripos( $user_agent, 'Chrome') !== false)
{
    echo "Google Chrome";
}

elseif (stripos( $user_agent, 'Safari') !== false)
{
   echo "Safari";
}

注意:使用stripos 而不是strpos 来说明大小写变化。

【讨论】:

  • 你不能也只是......反转测试吗? ;-) 考虑一下。
  • 他无法反转测试,因为两者都包含“Safari”...所以第一个测试仅通过 Chrome...Safari 在两者中...所以第二个检查正确通过...如果第二个是第一个,那么两个浏览器都会通过第一个语句。
  • 这会给你的安卓浏览器误报 Safari
【解决方案2】:

试试这个:

$browser = get_browser(null, true);
print_r($browser);

来自文档:尝试通过在 browscap.ini 文件中查找浏览器信息来确定用户浏览器的功能。

参考:http://php.net/manual/en/function.get-browser.php

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 2012-07-26
    • 2011-07-25
    • 1970-01-01
    • 2012-04-08
    • 2022-12-24
    相关资源
    最近更新 更多