За последние 24 часа нас посетили 18380 программистов и 1647 роботов. Сейчас ищут 1804 программиста ...

Определение браузера

Тема в разделе "PHP для новичков", создана пользователем UFO_, 24 май 2012.

  1. UFO_

    UFO_ Активный пользователь

    С нами с:
    29 фев 2012
    Сообщения:
    17
    Симпатии:
    0
    Добрый день. Столкнулся с проблемой определения браузера. Проблема возникает, при определении Safari т.к. в useragent Chrome присутствует "Safari"
    Код (Text):
    1. Chrome:
    2. Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6
    3.  
    4. Safari:
    5. 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):
    1. function check($Browser){
    2. $userAgent = $_SERVER['HTTP_USER_AGENT'];
    3. if (strpos($userAgent, $Browser) !== false){
    4.     echo "YES";
    5. else
    6.     echo "NO";
    7. }
    Что посоветуете?
     
  2. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
  3. UFO_

    UFO_ Активный пользователь

    С нами с:
    29 фев 2012
    Сообщения:
    17
    Симпатии:
    0
    Функция get_browser() не является "искоробной" и требует установки дополнительного компонента.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А чего тебе этот браузер уперся?
     
  5. UFO_

    UFO_ Активный пользователь

    С нами с:
    29 фев 2012
    Сообщения:
    17
    Симпатии:
    0
    Если видишь баг, надо исправлять.
    А то что это такое вместо Safari определяется Chrome.
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Функция неправильная просто. Там нужно не просто проверять, есть ли в строке определённое слово (подстрока). Я для статистики браузеров на сайте когда-то давно писал такое:
    Код (PHP):
    1. function getBrowserName($agent = '') {
    2.     $browser = '';
    3.     $version = '';
    4.     $altname = '';
    5.     if(is_int($pos = stripos($agent, 'Android'))) {
    6.         $browser = 'Android';
    7.         $pos += 7;
    8.         $version = getBrowserVersion($agent, $pos);
    9.     } elseif(is_int($pos = stripos($agent, 'Amaya'))) {
    10.         $browser = 'Amaya';
    11.         $pos += 5;
    12.         $version = getBrowserVersion($agent, $pos);
    13.     } elseif(is_int($pos = stripos($agent, 'America Online Browser'))) {
    14.         $browser = 'AOL Browser';
    15.         $pos += strlen('America Online Browser');
    16.         $version = getBrowserVersion($agent, $pos);
    17.     } elseif(is_int($pos = stripos($agent, 'Avant Browser'))) {
    18.         $browser = 'Avant Browser';
    19.     } elseif(is_int($pos = stripos($agent, 'Advanced Browser'))) {
    20.         $browser = 'Avant Browser';
    21.     } elseif(is_int($pos = stripos($agent, 'Camino'))) {
    22.         $browser = 'Camino';
    23.         $pos += 6;
    24.         $version = getBrowserVersion($agent, $pos);
    25.     } elseif(is_int($pos = stripos($agent, 'ELinks'))) {
    26.         $browser = 'ELinks';
    27.         $pos += 6;
    28.         $version = getBrowserVersion($agent, $pos);
    29.     } elseif(is_int($pos = stripos($agent, 'Epiphany'))) {
    30.         $browser = 'Epiphany';
    31.         $pos += 8;
    32.         $version = getBrowserVersion($agent, $pos);
    33.     } elseif(is_int($pos = stripos($agent, 'Flock'))) {
    34.         $browser = 'Flock';
    35.         $pos += 5;
    36.         $version = getBrowserVersion($agent, $pos);
    37.     } elseif(is_int($pos = stripos($agent, 'Chrome'))) {
    38.         $browser = 'Google Chrome';
    39.         $pos += 6;
    40.         $version = getBrowserVersion($agent, $pos);
    41.     } elseif(is_int($pos = stripos($agent, 'IceWeasel'))) {
    42.         $browser = 'IceWeasel';
    43.         $pos += 9;
    44.         $version = getBrowserVersion($agent, $pos);
    45.     } elseif(is_int($pos = stripos($agent, 'IceCat'))) {
    46.         $browser = 'IceCat';
    47.         $pos += 6;
    48.         $version = getBrowserVersion($agent, $pos);
    49.     } elseif(is_int($pos = stripos($agent, 'iCab'))) {
    50.         $browser = 'iCab';
    51.         $pos += 4;
    52.         $version = getBrowserVersion($agent, $pos);
    53.     } elseif(is_int($pos = stripos($agent, 'K-Meleon'))) {
    54.         $browser = 'K-Meleon';
    55.         $pos += 8;
    56.         $version = getBrowserVersion($agent, $pos);
    57.     } elseif(is_int($pos = stripos($agent, 'Konqueror'))) {
    58.         $browser = 'Konqueror';
    59.         $pos += 9;
    60.         $version = getBrowserVersion($agent, $pos);
    61.     } elseif(is_int($pos = stripos($agent, 'Links'))) {
    62.         $browser = 'Links';
    63.         $pos += 5;
    64.         $version = getBrowserVersion($agent, $pos);
    65.     } elseif(is_int($pos = stripos($agent, 'Lynx'))) {
    66.         $browser = 'Lynx';
    67.         $pos += 4;
    68.         $version = getBrowserVersion($agent, $pos);
    69.     } elseif(is_int($pos = stripos($agent, 'Minimo'))) {
    70.         $browser = 'Minimo';
    71.         $pos += 6;
    72.         $version = getBrowserVersion($agent, $pos);
    73.     } elseif(is_int($pos = stripos($agent, 'Splashtop'))) {
    74.         $browser = 'Splashtop Browser';
    75.         $pos += 9;
    76.         $version = getBrowserVersion($agent, $pos);
    77.     } elseif(is_int($pos = stripos($agent, 'Phoenix'))) {
    78.         $browser = 'Firefox';
    79.         $altname = 'Phoenix';
    80.         $pos += 7;
    81.         $version = getBrowserVersion($agent, $pos);
    82.     } elseif(is_int($pos = stripos($agent, 'Firebird'))) {
    83.         $browser = 'Firefox';
    84.         $altname = 'Firebird';
    85.         $pos += 8;
    86.         $version = getBrowserVersion($agent, $pos);
    87.     } elseif(is_int($pos = stripos($agent, 'GranParadiso'))) {
    88.         $browser = 'Firefox';
    89.         $altname = 'GranParadiso';
    90.         $pos += 12;
    91.         $version = getBrowserVersion($agent, $pos);
    92.     } elseif(is_int($pos = stripos($agent, 'Shiretoko'))) {
    93.         $browser = 'Firefox';
    94.         $altname = 'Shiretoko';
    95.         $pos += 9;
    96.         $version = getBrowserVersion($agent, $pos);
    97.     } elseif(is_int($pos = stripos($agent, 'Firefox'))) {
    98.         $browser = 'Firefox';
    99.         $pos += 7;
    100.         $version = getBrowserVersion($agent, $pos);
    101.     } elseif(is_int($pos = stripos($agent, 'Netscape'))) {
    102.         $browser = 'Netscape';
    103.         $pos += 8;
    104.         $version = getBrowserVersion($agent, $pos);
    105.     } elseif(is_int($pos = stripos($agent, 'WebPro'))) {
    106.         $browser = 'Novarra';
    107.         $pos += 6;
    108.         $version = getBrowserVersion($agent, $pos);
    109.     } elseif(is_int($pos = stripos($agent, 'OffByOne'))) {
    110.         $browser = 'Off By One';
    111.     } elseif(is_int($pos = stripos($agent, 'OmniWeb'))) {
    112.         $browser = 'OmniWeb';
    113.         $pos += 7;
    114.         $version = getBrowserVersion($agent, $pos);
    115.     } elseif(is_int($pos = stripos($agent, 'OPWV'))) {
    116.         $browser = 'Openwave';
    117.     } elseif(is_int($pos = stripos($agent, 'Opera'))) {
    118.         $browser = 'Opera';
    119.         $pos += 5;
    120.         $version = getBrowserVersion($agent, $pos);
    121.         if(is_int(stripos($agent, 'Nokia')) or is_int(stripos($agent, 'Mobi')))
    122.             $browser = 'Opera Mobile';
    123.         elseif(is_int(stripos($agent, 'Mini')))
    124.             $browser = 'Opera Mini';
    125.     } elseif(is_int($pos = stripos($agent, 'PlayStation Portable'))) {
    126.         $browser = 'PlayStation Portable';
    127.     } elseif(is_int($pos = stripos($agent, 'PLAYSTATION'))) {
    128.         $browser = 'PlayStation';
    129.         $pos += 11;
    130.         $version = getBrowserVersion($agent, $pos);
    131.     } elseif(is_int($pos = stripos($agent, 'Shiira'))) {
    132.         $browser = 'Shiira';
    133.         $pos += 6;
    134.         $version = getBrowserVersion($agent, $pos);
    135.     } elseif(is_int($pos = stripos($agent, 'NokiaN'))) {
    136.         $browser = 'Web browser S60 (mobile)';
    137.     } elseif(is_int($pos = stripos($agent, 'Safari'))) {
    138.         $browser = 'Safari';
    139.         $pos += 6;
    140.         $version = getBrowserVersion($agent, $pos);
    141.         if(is_int(stripos($agent, 'Mobile')))
    142.             $browser = 'Safari Mobile';
    143.     } elseif(is_int($pos = stripos($agent, 'SeaMonkey'))) {
    144.         $browser = 'SeaMonkey';
    145.         $pos += 9;
    146.         $version = getBrowserVersion($agent, $pos);
    147.     } elseif(is_int($pos = stripos($agent, 'w3m'))) {
    148.         $browser = 'w3m';
    149.         $pos += 3;
    150.         $version = getBrowserVersion($agent, $pos);
    151.     } elseif(is_int($pos = stripos($agent, 'WebExplorer'))) {
    152.         $browser = 'WebExplorer';
    153.         $pos += 17;
    154.         $version = getBrowserVersion($agent, $pos);
    155.     } elseif(is_int($pos = stripos($agent, 'MSIE'))) {
    156.         $browser = 'Internet Explorer';
    157.         $pos += 4;
    158.         $version = getBrowserVersion($agent, $pos);
    159.         if(is_int(stripos($agent, 'Smartphone')) or is_int(stripos($agent, 'PPC')) or is_int(stripos($agent, 'Motorola')) or is_int(stripos($agent, 'IEMobile')))
    160.             $browser = 'Internet Explorer Mobile';
    161.     } elseif(is_int($pos = stripos($agent, 'MSPIE'))) {
    162.         $browser = 'Internet Explorer Mobile';
    163.         $pos += 5;
    164.         $version = getBrowserVersion($agent, $pos);
    165.     } elseif(is_int($pos = stripos($agent, 'Microsoft Pocket Internet Explorer'))) {
    166.         $browser = 'Internet Explorer Mobile';
    167.         $pos += strlen('Microsoft Pocket Internet Explorer');
    168.         $version = getBrowserVersion($agent, $pos);
    169.     } elseif(is_int($pos = stripos($agent, 'Mozilla'))) {
    170.         $browser = 'Netscape Navigator';
    171.         $pos += 7;
    172.         $version = getBrowserVersion($agent, $pos);
    173.         if(is_int(stripos($agent, 'Gecko'))) {
    174.             $browser = 'Mozilla';
    175.             $pos = stripos($agent, 'rv:') + 3;
    176.             $version = getBrowserVersion($agent, $pos);
    177.         }
    178.     } elseif(is_int($pos = stripos($agent, 'Microsoft Internet Explorer'))) {
    179.         $browser = 'Internet Explorer';
    180.         $version = '1.0';
    181.     }
    182.     $ret = $browser . ' ' . $version;
    183.     if(!empty($altname))
    184.         $ret .= ' (' . $altname . ')';
    185.     return($ret);
    186. }
    187. function getBrowserVersion($agent = '', $start = 0) {
    188.     $version = '';
    189.     $length = strlen($agent);
    190.     if($start >= $length) $start = $length - 1;
    191.     for($i = $start; $i < $length; $i++) {
    192.         if($agent{$i} === '(') continue;
    193.         if(is_numeric($agent{$i}) or $agent{$i} === '.' or $agent{$i} === '/') {
    194.             if($agent{$i} === '/' and empty($version)) continue;
    195.             $version .= $agent{$i};
    196.         } else
    197.             if(!empty($version)) break;
    198.     }
    199.     return($version);
    200. } 
    Возвращает название и (через пробел, мне было так достаточно) версию браузера. Вызывать можно так:
    Код (PHP):
    1. $browser = getBrowserName($_SERVER['HTTP_USER_AGENT']); 
    Если тебе нужно именно проверить, является ли текущий браузер каким-то конкретным - то, соответственно, нужно учитывать не только то, что в user-agent есть какая-то заданная подстрока, но и также, например, нету какой-то другой подстроки или, может быть присутствует также что-то ещё - нужно смотреть какие сейчас user-agent-ы бывают, анализировать...