Как определить «Google Chrome» как пользовательский агент, использующий PHP? - PullRequest
18 голосов
/ 15 июня 2010

Мне интересно узнать, является ли пользовательский агент "Chrome" на стороне сервера, использующей PHP.Есть ли надежное регулярное выражение для анализа строки агента пользователя из заголовка запроса?

Ответы [ 3 ]

29 голосов
/ 15 июня 2010

На данный момент слишком много браузеров претендуют на то, чтобы быть Chrome, чтобы продолжать свою популярность, а также бороться со злоупотреблением обнаружением браузеров, чтобы простое совпадение с "Chrome" было эффективным.Я бы порекомендовал в будущем обнаружение функций, но Chrome (и WebKit / Blink в целом) также известен тем, что лжет механизмам обнаружения функций, так что даже это не так здорово, как это уже было.

Я могу только рекомендовать оставаться в курсе событий, сравнивая известные ему строки UA со строками других браузеров на сторонних сайтах и ​​создавая шаблоны оттуда.Как вы это сделаете, полностью зависит от самих струн.Просто имейте в виду, что из-за особенностей браузеров и строк UA никогда не может быть «надежного» регулярного выражения для их сопоставления.

В PHP соответствующий серверный var равен $_SERVER['HTTP_USER_AGENT']. * 1006.*

16 голосов
/ 03 июня 2013

Стоит отметить, что если вы также хотите включить Chrome для iOS, вам также нужно будет сопоставить с «CriOS»:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], 'CriOS') !== false) {
    // User agent is Google Chrome
}
7 голосов
/ 15 ноября 2015

Опираясь на ответ @Adams, более точно определяя Google Chrome, исключая некоторые браузеры с "Chrome" в строке агента пользователя, используя useragentstring.com и udger.com :

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
}
...