试图用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"一些奇怪的东西.是什么赋予了?
检查这段代码,我发现这很有用.不要检查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';
使用现有方法(即get_browser
)可能比自己编写一些东西更好,因为它具有(更好)支持并且将使用更新版本进行更新.可能还有可用的库可以以可靠的方式获取浏览器ID.
解码$_SERVER['HTTP_USER_AGENT']
很困难,因为很多浏览器都有非常相似的数据,并且倾向于(误)使用它来获得自己的好处.但是,如果您真的想要对它们进行解码,则可以使用此页面上的信息来获取所有可用的代理ID.此页面还显示您的示例输出确实属于IE 7.有关代理ID本身中字段的更多信息可以在此页面上找到,但正如我所说,浏览器倾向于使用它来获取它们自己的好处,它可能在一个(稍微)其他格式.
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();