2010-06-15 5 views

답변

27

이 시점에서 너무 많은 브라우저가 인기를 얻고 브라우저 탐지의 남용을 방지하기 위해 Chrome으로 가장하여 "Chrome"이 더 이상 효과가 없도록합니다. 앞으로도 기능 감지 기능을 권장 할 예정이지만 Chrome (및 WebKit/Blink는 일반적으로) 기능 탐지 메커니즘에 대한 거짓말로 유명하기 때문에 더 이상 크랙되지 않을 정도로 커지지 않습니다.

알려진 UA 문자열을 제 3 자 사이트를 통해 다른 브라우저의 것과 비교하고 거기에서 패턴을 만드는 방법으로 만 머물러있게 할 것을 권장합니다. 어떻게하는지는 문자열 자체에 전적으로 달려 있습니다. 브라우저와 UA 문자열의 특성으로 인해 일치하는 "신뢰할 수있는"정규 표현식이 될 수 없다는 점을 명심하십시오.

PHP에서 관련 서버 변수는 $_SERVER['HTTP_USER_AGENT']입니다.

+1

니스 하나 useragentstring.comudger.com를 사용하여 사용자 에이전트 문자열에 "크롬"와 브라우저. ** preg_match **를 사용하여 Chrome을 감지하면 확실히 오버 헤드가 발생합니다. –

+0

왜'! == false'가 필요한가요? (strpos ($ _ SERVER [ 'HTTP_USER_AGENT'], 'Chrome'))'? –

+7

@Tuga : 문자열이''Chrome''로 시작하면,'strpos()'는 0을 반환합니다.'0 == false' 때문에, if 코드는 실행되지 않지만 당신이 원합니다. 이 함수는 문자열이 발견되지 않으면 실제'false'를 반환하므로 '! == false'를 사용하여 유형별로 비교해야합니다. 이것은 또한 당신의 대답이 틀린 이유입니다. – BoltClock

16
당신은 또한 iOS 용 크롬을 포함 할 경우, 당신은뿐만 아니라 "CriOS"에 대해 일치해야 함을 언급 할 가치가

: 일부를 제외하여

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

건물 @Adams에 대답, 더 정확하게 감지 구글 크롬

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 
} 
관련 문제