Добрый день. Столкнулся с проблемой определения браузера. Проблема возникает, при определении Safari т.к. в useragent Chrome присутствует "Safari" Код (Text): Chrome: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6 Safari: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10 Определяю вот такой функцией. На вход подаю названия браузера (MSIE, Opera, Firefox, Chrome, Safari и т.д.) Код (Text): function check($Browser){ $userAgent = $_SERVER['HTTP_USER_AGENT']; if (strpos($userAgent, $Browser) !== false){ echo "YES"; else echo "NO"; } Что посоветуете?
Функция неправильная просто. Там нужно не просто проверять, есть ли в строке определённое слово (подстрока). Я для статистики браузеров на сайте когда-то давно писал такое: Код (PHP): function getBrowserName($agent = '') { $browser = ''; $version = ''; $altname = ''; if(is_int($pos = stripos($agent, 'Android'))) { $browser = 'Android'; $pos += 7; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Amaya'))) { $browser = 'Amaya'; $pos += 5; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'America Online Browser'))) { $browser = 'AOL Browser'; $pos += strlen('America Online Browser'); $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Avant Browser'))) { $browser = 'Avant Browser'; } elseif(is_int($pos = stripos($agent, 'Advanced Browser'))) { $browser = 'Avant Browser'; } elseif(is_int($pos = stripos($agent, 'Camino'))) { $browser = 'Camino'; $pos += 6; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'ELinks'))) { $browser = 'ELinks'; $pos += 6; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Epiphany'))) { $browser = 'Epiphany'; $pos += 8; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Flock'))) { $browser = 'Flock'; $pos += 5; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Chrome'))) { $browser = 'Google Chrome'; $pos += 6; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'IceWeasel'))) { $browser = 'IceWeasel'; $pos += 9; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'IceCat'))) { $browser = 'IceCat'; $pos += 6; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'iCab'))) { $browser = 'iCab'; $pos += 4; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'K-Meleon'))) { $browser = 'K-Meleon'; $pos += 8; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Konqueror'))) { $browser = 'Konqueror'; $pos += 9; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Links'))) { $browser = 'Links'; $pos += 5; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Lynx'))) { $browser = 'Lynx'; $pos += 4; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Minimo'))) { $browser = 'Minimo'; $pos += 6; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Splashtop'))) { $browser = 'Splashtop Browser'; $pos += 9; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Phoenix'))) { $browser = 'Firefox'; $altname = 'Phoenix'; $pos += 7; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Firebird'))) { $browser = 'Firefox'; $altname = 'Firebird'; $pos += 8; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'GranParadiso'))) { $browser = 'Firefox'; $altname = 'GranParadiso'; $pos += 12; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Shiretoko'))) { $browser = 'Firefox'; $altname = 'Shiretoko'; $pos += 9; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Firefox'))) { $browser = 'Firefox'; $pos += 7; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Netscape'))) { $browser = 'Netscape'; $pos += 8; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'WebPro'))) { $browser = 'Novarra'; $pos += 6; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'OffByOne'))) { $browser = 'Off By One'; } elseif(is_int($pos = stripos($agent, 'OmniWeb'))) { $browser = 'OmniWeb'; $pos += 7; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'OPWV'))) { $browser = 'Openwave'; } elseif(is_int($pos = stripos($agent, 'Opera'))) { $browser = 'Opera'; $pos += 5; $version = getBrowserVersion($agent, $pos); if(is_int(stripos($agent, 'Nokia')) or is_int(stripos($agent, 'Mobi'))) $browser = 'Opera Mobile'; elseif(is_int(stripos($agent, 'Mini'))) $browser = 'Opera Mini'; } elseif(is_int($pos = stripos($agent, 'PlayStation Portable'))) { $browser = 'PlayStation Portable'; } elseif(is_int($pos = stripos($agent, 'PLAYSTATION'))) { $browser = 'PlayStation'; $pos += 11; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Shiira'))) { $browser = 'Shiira'; $pos += 6; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'NokiaN'))) { $browser = 'Web browser S60 (mobile)'; } elseif(is_int($pos = stripos($agent, 'Safari'))) { $browser = 'Safari'; $pos += 6; $version = getBrowserVersion($agent, $pos); if(is_int(stripos($agent, 'Mobile'))) $browser = 'Safari Mobile'; } elseif(is_int($pos = stripos($agent, 'SeaMonkey'))) { $browser = 'SeaMonkey'; $pos += 9; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'w3m'))) { $browser = 'w3m'; $pos += 3; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'WebExplorer'))) { $browser = 'WebExplorer'; $pos += 17; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'MSIE'))) { $browser = 'Internet Explorer'; $pos += 4; $version = getBrowserVersion($agent, $pos); if(is_int(stripos($agent, 'Smartphone')) or is_int(stripos($agent, 'PPC')) or is_int(stripos($agent, 'Motorola')) or is_int(stripos($agent, 'IEMobile'))) $browser = 'Internet Explorer Mobile'; } elseif(is_int($pos = stripos($agent, 'MSPIE'))) { $browser = 'Internet Explorer Mobile'; $pos += 5; $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Microsoft Pocket Internet Explorer'))) { $browser = 'Internet Explorer Mobile'; $pos += strlen('Microsoft Pocket Internet Explorer'); $version = getBrowserVersion($agent, $pos); } elseif(is_int($pos = stripos($agent, 'Mozilla'))) { $browser = 'Netscape Navigator'; $pos += 7; $version = getBrowserVersion($agent, $pos); if(is_int(stripos($agent, 'Gecko'))) { $browser = 'Mozilla'; $pos = stripos($agent, 'rv:') + 3; $version = getBrowserVersion($agent, $pos); } } elseif(is_int($pos = stripos($agent, 'Microsoft Internet Explorer'))) { $browser = 'Internet Explorer'; $version = '1.0'; } $ret = $browser . ' ' . $version; if(!empty($altname)) $ret .= ' (' . $altname . ')'; return($ret); } function getBrowserVersion($agent = '', $start = 0) { $version = ''; $length = strlen($agent); if($start >= $length) $start = $length - 1; for($i = $start; $i < $length; $i++) { if($agent{$i} === '(') continue; if(is_numeric($agent{$i}) or $agent{$i} === '.' or $agent{$i} === '/') { if($agent{$i} === '/' and empty($version)) continue; $version .= $agent{$i}; } else if(!empty($version)) break; } return($version); } Возвращает название и (через пробел, мне было так достаточно) версию браузера. Вызывать можно так: Код (PHP): $browser = getBrowserName($_SERVER['HTTP_USER_AGENT']); Если тебе нужно именно проверить, является ли текущий браузер каким-то конкретным - то, соответственно, нужно учитывать не только то, что в user-agent есть какая-то заданная подстрока, но и также, например, нету какой-то другой подстроки или, может быть присутствует также что-то ещё - нужно смотреть какие сейчас user-agent-ы бывают, анализировать...