使用php进行可靠的用户浏览器检测

2022-08-30 12:47:43

尝试仅使用PHP检测用户的浏览器,$_SERVER['HTTP_USER_AGENT']是一种可靠的方法吗?我应该选择get_browser功能吗?您发现哪一个可以带来更精确的结果?

如果此方法是实用的,那么使用它来输出相关的CSS链接是不明智的,例如:

if(stripos($_SERVER['HTTP_USER_AGENT'],"mozilla")!==false)
   echo '<link type="text/css" href="mozilla.css" />';

我注意到这个问题,但是我想澄清这是否有利于面向CSS的检测。

更新:非常可疑的东西:我在IE 7上尝试过,这就是它输出的内容:echo $_SERVER['HTTP_USER_AGENT'];

Mozilla/4.0 (兼容;MSIE 7.0;视窗 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

检查此代码,我发现这很有用。不要检查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';

答案 2

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

解码是困难的,因为许多浏览器具有非常相似的数据,并且倾向于(错误地)使用它来为自己谋取利益。但是,如果您真的想解码它们,则可以使用此页面上的信息来获取所有可用的代理 ID。此页面还显示您的示例输出确实属于 IE 7。有关代理ID本身中的字段的更多信息可以在此页面上找到,但是正如我所说,浏览器已经倾向于将其用于自己的利益,并且它可能是(略微)其他格式。$_SERVER['HTTP_USER_AGENT']


推荐