当前位置:  开发笔记 > 编程语言 > 正文

可靠的用户浏览器检测与PHP

如何解决《可靠的用户浏览器检测与PHP》经验,为你挑选了3个好方法。

试图用PHP检测用户的浏览器,$ _SERVER ['HTTP_USER_AGENT']是一种可靠的方法吗?我应该选择get_browser函数吗?您找到哪一个会带来更精确的结果?

如果这种方法是实用的,那么建议使用它来输出相关的CSS链接,例如:

if(stripos($_SERVER['HTTP_USER_AGENT'],"mozilla")!==false)
   echo '';

我注意到了这个问题,但我想澄清这是否适合面向CSS的检测.

更新: 真的很可疑:我试过echo $_SERVER['HTTP_USER_AGENT'];IE 7,这就是输出:

Mozilla/4.0(兼容; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)

Safari也给了"mozilla"一些奇怪的东西.是什么赋予了?



1> Ekramul Hoqu..:

检查这段代码,我发现这很有用.不要检查Mozilla,因为大多数浏览器都将此用作用户代理字符串

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE)
   echo 'Internet explorer';
 elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) //For Supporting IE 11
    echo 'Internet explorer';
 elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== FALSE)
   echo 'Mozilla Firefox';
 elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== FALSE)
   echo 'Google Chrome';
 elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== FALSE)
   echo "Opera Mini";
 elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== FALSE)
   echo "Opera";
 elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') !== FALSE)
   echo "Safari";
 else
   echo 'Something else';


不适用于IE 11(请看这里:http://www.nczonline.net/blog/2013/07/02/internet-explorer-11-dont-call-me-ie/)

2> Veger..:

使用现有方法(即get_browser)可能比自己编写一些东西更好,因为它具有(更好)支持并且将使用更新版本进行更新.可能还有可用的库可以以可靠的方式获取浏览器ID.

解码$_SERVER['HTTP_USER_AGENT']很困难,因为很多浏览器都有非常相似的数据,并且倾向于(误)使用它来获得自己的好处.但是,如果您真的想要对它们进行解码,则可以使用此页面上的信息来获取所有可用的代理ID.此页面还显示您的示例输出确实属于IE 7.有关代理ID本身中字段的更多信息可以在此页面上找到,但正如我所说,浏览器倾向于使用它来获取它们自己的好处,它可能在一个(稍微)其他格式.



3> user1524615..:
class Browser { 
    /** 
    Figure out what browser is used, its version and the platform it is 
    running on. 

    The following code was ported in part from JQuery v1.3.1 
    */ 
    public static function detect() { 
        $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); 

        // Identify the browser. Check Opera and Safari first in case of spoof. Let Google Chrome be identified as Safari. 
        if (preg_match('/opera/', $userAgent)) { 
            $name = 'opera'; 
        } 
        elseif (preg_match('/webkit/', $userAgent)) { 
            $name = 'safari'; 
        } 
        elseif (preg_match('/msie/', $userAgent)) { 
            $name = 'msie'; 
        } 
        elseif (preg_match('/mozilla/', $userAgent) && !preg_match('/compatible/', $userAgent)) { 
            $name = 'mozilla'; 
        } 
        else { 
            $name = 'unrecognized'; 
        } 

        // What version? 
        if (preg_match('/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches)) { 
            $version = $matches[1]; 
        } 
        else { 
            $version = 'unknown'; 
        } 

        // Running on what platform? 
        if (preg_match('/linux/', $userAgent)) { 
            $platform = 'linux'; 
        } 
        elseif (preg_match('/macintosh|mac os x/', $userAgent)) { 
            $platform = 'mac'; 
        } 
        elseif (preg_match('/windows|win32/', $userAgent)) { 
            $platform = 'windows'; 
        } 
        else { 
            $platform = 'unrecognized'; 
        } 

        return array( 
            'name'      => $name, 
            'version'   => $version, 
            'platform'  => $platform, 
            'userAgent' => $userAgent 
        ); 
    } 
} 


$browser = Browser::detect(); 

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有