如何使用PHP检测"Google Chrome"作为用户代理?

Xub*_*bin 19 php regex user-agent google-chrome browser-detection

我很想知道用户代理是否是使用PHP在服务器端的"Chrome".是否有可靠的正则表达式来解析请求标头中的用户代理字符串?

Bol*_*ock 30

在这一点上,太多的浏览器假装是Chrome,以便利用它的受欢迎程度以及打击滥用浏览器检测,以便"Chrome"的简单匹配再次有效.我建议继续进行特征检测,但是Chrome(以及WebKit/Blink)一般都会因为说谎特征检测机制而臭名昭着,所以即便如此,它也不会像它已经破解一样大.

我只能通过将已知的UA字符串与其他浏览器的UA字符串通过第三方网站进行比较,并从那里创建模式来建议保持最佳状态.你如何做到这完全取决于字符串本身.请记住,由于浏览器和UA字符串的性质,永远不会有一个"可靠"的正则表达式来匹配它们.

在PHP中,相关的服务器var是$_SERVER['HTTP_USER_AGENT'].

  • @Tuga:如果字符串以''Chrome'`开头,`strpos()`返回0.由于`0 == false`,if代码不会运行,但你想要它.如果找不到字符串,该函数返回实际的`false`,因此您必须使用`!== false`按类型进行比较.这也是你的答案错误的原因. (8认同)
  • 我不同意:这个if子句将在以下浏览器的版本上评估为true:Chrome,Maxthon,Flock,IE 10.0,IE 9.0,IE 8.0,Iron,RockMelt.更多信息:http://www.useragentstring.com/pages/Browserlist/ !!! (3认同)
  • 为什么需要`!== false`?只是`if(strpos($ _ SERVER ['HTTP_USER_AGENT'],'Chrome'))会更容易吗? (2认同)
  • @NaNsTtiX您说的对。但是:1)Maxthon,Flock,Iron和RockMelt是基于Chrome的(因此它们基本上都是Chrome);2)仅当安装了[Chrome Frame](http://www.google.com/chromeframe)(即IE以某种方式成为Chrome)时,IE的用户代理中才包含“ chrome”。如果有人需要分别检测IE,则可以添加`stripos($ _ SERVER ['HTTP_USER_AGENT'],'chromeframe')=== false'条件。 (2认同)

Ada*_*dam 17

值得一提的是,如果您还想要包含Chrome for iOS,您还需要与"CriOS"匹配:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], 'CriOS') !== false) {
    // User agent is Google Chrome
}
Run Code Online (Sandbox Code Playgroud)


Lei*_*eia 8

在@Adams答案的基础上,通过使用useragentstring.comudger.com在用户代理字符串中排除某些带有"Chrome"的浏览器,更准确地检测Google Chrome :

if(preg_match('/(Chrome|CriOS)\//i',$_SERVER['HTTP_USER_AGENT'])
 && !preg_match('/(Aviator|ChromePlus|coc_|Dragon|Edge|Flock|Iron|Kinza|Maxthon|MxNitro|Nichrome|OPR|Perk|Rockmelt|Seznam|Sleipnir|Spark|UBrowser|Vivaldi|WebExplorer|YaBrowser)/i',$_SERVER['HTTP_USER_AGENT'])){
    // Browser might be Google Chrome
}
Run Code Online (Sandbox Code Playgroud)