PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 2
Zagin Отправлено: 24 Февраля, 2023 - 23:07:45 • Тема: Регулярка не распознаёт версию браузера Opera :( • Форум: Регулярные выражения

Ответов: 0
Просмотров: 1242
Приветствую всех!
Мне удалось найти в Интернете тут php-функцию определения браузера, умеющую отличать даже браузер Opera, но при этом эта функция почему-то не хочет читать версию Oper'ы. Версию других браузеров (я проверял ещё Firefox и Edge) определяет на ура, а вот Оперную версию - игнорирует, хотя видимых отличий в её написании от версий Firefox и Edge в строке HTTP_USER_AGENT - нет.
Помогите разобраться, пожалуйста. Ниже привожу код функции и её вызова:
PHP:
скопировать код в буфер обмена
  1. function getBrowser1() {
  2.     $u_agent = $_SERVER['HTTP_USER_AGENT'];
  3.     $bname = 'Unknown';
  4.     $platform = 'Unknown';
  5.     $version= "";
  6.     if (preg_match('/linux/i', $u_agent)) {// First get the platform?
  7.         $platform = 'linux';
  8.     } elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
  9.         $platform = 'mac';
  10.     } elseif (preg_match('/windows|win32/i', $u_agent)) {
  11.         $platform = 'windows';
  12.     };
  13.     if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) {// Next get the name of the useragent yes seperately and for good reason
  14.         $bname = 'Internet Explorer';
  15.         $ub = "MSIE";
  16.     } elseif(preg_match('/Firefox/i',$u_agent)) {
  17.         $bname = 'Mozilla Firefox';
  18.         $ub = "Firefox";
  19.     } elseif(preg_match('/OPR/i',$u_agent)) {
  20.         $bname = 'Opera';
  21.         $ub = "Opera";
  22.     } elseif(preg_match('/Chrome/i',$u_agent) && !preg_match('/Edg/i',$u_agent)) {
  23.         $bname = 'Google Chrome';
  24.         $ub = "Chrome";
  25.     } elseif(preg_match('/Safari/i',$u_agent) && !preg_match('/Edg/i',$u_agent)) {
  26.         $bname = 'Apple Safari';
  27.         $ub = "Safari";
  28.     } elseif(preg_match('/Netscape/i',$u_agent)) {
  29.         $bname = 'Netscape';
  30.         $ub = "Netscape";
  31.     } elseif(preg_match('/Edg/i',$u_agent)) {
  32.         $bname = 'Edge';
  33.         $ub = "Edg";
  34.     } elseif(preg_match('/Trident/i',$u_agent)) {
  35.         $bname = 'Internet Explorer';
  36.         $ub = "MSIE";
  37.     }; // finally get the correct version number:
  38.     $known = array('Version', $ub, 'other');
  39.     $pattern = '#(?<browser>' . join('|', $known) .     ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
  40.     if (!preg_match_all($pattern, $u_agent, $matches)) {
  41.         // we have no matching number just continue
  42.     }; // see how many we have:
  43.     $i = count($matches['browser']);
  44.     if ($i != 1) {//we will have two since we are not using 'other' argument yet //see if version is before or after the name
  45.         if (strripos($u_agent,"Version") < strripos($u_agent,$ub)) {
  46.             $version = (!empty($matches['version']) ? $matches['version'][0] : '');
  47.         } else {
  48.             $version = (!empty($matches['version']) ? $matches['version'][1] : '');
  49.         };
  50.     } else {
  51.     //$version = (!empty($matches['version']) ? $matches['version'][0] : '');
  52.     }; // check if we have a number:
  53.     if ($version==null || $version=="") {
  54.         $version="?";
  55.     };
  56.     return [
  57.         'userAgent' => $u_agent,
  58.         'name'      => $bname,
  59.         'version'   => $version,
  60.         'platform'  => $platform,
  61.         'pattern'    => $pattern
  62.     ];
  63. }
  64. // invoke function
  65. $arBrowser =  getBrowser1();
  66. echo '<pre>';
  67. print_r($arBrowser);
  68. echo '</pre>';

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB