sky/include/UserAgent/get_browser_name.php

246 lines
9.7 KiB
PHP
Raw Normal View History

<?php
/**
* Copyright 2008-2016 Kyle Baker (Email: kyleabaker@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Partly modified by Hakula */
/* Detect Web Browser Version */
function get_browser_version($ua, $title) {
// Grab the browser version if it's present
preg_match('/' . $title . '[\ |\/|\:]?([.0-9a-zA-Z]+)/i', $ua, $regmatch);
$version = (is_null($regmatch[1])) ? '' : $regmatch[1];
return $version;
}
/* Detect Web Browsers */
function get_browser_name($ua) {
$version = '';
$code = null;
if (preg_match('/360se/i', $ua)) {
$title = '360 安全浏览器';
$code = '360';
} elseif (preg_match('/baidubrowser/i', $ua) || preg_match('/\ Spark/i', $ua)) {
$title = '百度浏览器';
$version = get_browser_version($ua, 'Browser');
$code = 'BaiduBrowser';
} elseif (preg_match('/SE\ /i', $ua) && preg_match('/MetaSr/i', $ua)) {
$title = '搜狗高速浏览器';
$code = 'Sogou-Explorer';
} elseif (preg_match('/QQBrowser/i', $ua) || preg_match('/MQQBrowser/i', $ua)) {
$title = 'QQ 浏览器';
$version = get_browser_version($ua, 'QQBrowser');
$code = 'QQBrowser';
} elseif (preg_match('/chromeframe/i', $ua)) {
$title = 'Google Chrome Frame';
$version = get_browser_version($ua, 'chromeframe');
$code = 'Chrome';
} elseif (preg_match('/Chromium/i', $ua)) {
$title = 'Chromium';
$version = get_browser_version($ua, 'Chromium');
} elseif (preg_match('/CrMo/i', $ua)) {
$title = 'Google Chrome Mobile';
$version = get_browser_version($ua, 'CrMo');
$code = 'Chrome';
} elseif (preg_match('/CriOS/i', $ua)) {
$title = 'Google Chrome for iOS';
$version = get_browser_version($ua, 'CriOS');
$code = 'Chrome';
} elseif (preg_match('/Maxthon/i', $ua)) {
$title = '傲游浏览器';
$version = get_browser_version($ua, 'Maxthon');
$code = 'Maxthon';
} elseif (preg_match('/MiuiBrowser/i', $ua)) {
$title = 'MIUI Browser';
$version = get_browser_version($ua, 'MiuiBrowser');
$code = 'MIUI-Browser';
} elseif (preg_match('/TheWorld/i', $ua)) {
$title = '世界之窗浏览器';
$code = 'TheWorld';
} elseif (preg_match('/UBrowser/i', $ua)) {
$title = 'UC 浏览器';
$version = get_browser_version($ua, 'UBrowser');
$code = 'UC';
} elseif (preg_match('/UCBrowser/i', $ua)) {
$title = 'UC 浏览器';
$version = get_browser_version($ua, 'UCBrowser');
$code = 'UC';
} elseif (preg_match('/UC\ Browser/i', $ua)) {
$title = 'UC 浏览器';
$version = get_browser_version($ua, 'UC Browser');
$code = 'UC';
} elseif (preg_match('/UCWEB/i', $ua)) {
$title = 'UC 浏览器';
$version = get_browser_version($ua, 'UCWEB');
$code = 'UC';
} elseif (preg_match('/BlackBerry/i', $ua)) {
$title = 'BlackBerry';
} elseif (preg_match('/Coast/i', $ua)) {
$title = 'Coast';
$version = get_browser_version($ua, 'Coast');
$code = 'Opera';
} elseif (preg_match('/IEMobile/i', $ua)) {
$title = 'IE Mobile';
$code = 'IE';
} elseif (preg_match('/LG Browser/i', $ua)) {
$title = 'LG Web Browser';
$version = get_browser_version($ua, 'Browser');
$code = 'LG';
} elseif (preg_match('/Navigator/i', $ua)) {
$title = 'Netscape Navigator';
$code = 'Netscape';
} elseif (preg_match('/Netscape/i', $ua)) {
$title = 'Netscape';
} elseif (preg_match('/Nintendo 3DS/i', $ua)) {
$title = 'Nintendo 3DS';
$code = 'Nintendo';
} elseif (preg_match('/NintendoBrowser/i', $ua)) {
$title = 'Nintendo Browser';
$version = get_browser_version($ua, 'Browser');
$code = 'Nintendo';
} elseif (preg_match('/NokiaBrowser/i', $ua)) {
$title = 'Nokia Browser';
$version = get_browser_version($ua, 'Browser');
$code = 'Nokia';
} elseif (preg_match('/Opera Mini/i', $ua)) {
$title = 'Opera Mini';
$code = 'Opera';
} elseif (preg_match('/Opera Mobi/i', $ua)) {
if (preg_match('/Version/i', $ua)) {
$version = get_browser_version($ua, 'Version');
} else {
$version = get_browser_version($ua, 'Opera Mobi');
}
$title = 'Opera Mobile';
$code = 'Opera';
} elseif (preg_match('/Opera/i', $ua) || preg_match('/OPR/i', $ua)) {
$title = 'Opera';
$code = 'Opera';
// How is version stored on this Opera ua?
if (preg_match('/Version/i', $ua)) {
$version = get_browser_version($ua, 'Version');
} elseif (preg_match('/OPR/i', $ua)) {
$version = get_browser_version($ua, 'OPR');
} else {
// Use Opera as fallback since full title may change (Next, Developer, etc.)
$version = get_browser_version($ua, 'Opera');
}
// Parse full edition name, ex: Opera/9.80 (X11; Linux x86_64; U; Edition Labs Camera and Pages; Ubuntu/11.10; en) Presto/2.9.220 Version/12.00
if (preg_match('/Edition ([\ ._0-9a-zA-Z]+)/i', $ua, $regmatch)) {
$title .= ' ' . $regmatch[1];
} elseif (preg_match('/Opera ([\ ._0-9a-zA-Z]+)/i', $ua, $regmatch)) {
$title .= ' ' . $regmatch[1];
}
} elseif (preg_match('/PlayStation\ 4/i', $ua)) {
$title = 'PS4 Web Browser';
$code = 'PS4';
} elseif (preg_match('/SEMC-Browser/i', $ua)) {
$title = 'SEMC Browser';
$version = get_browser_version($ua, 'SEMC-Browser');
$code = 'Sony';
} elseif (preg_match('/SEMC-java/i', $ua)) {
$title = 'SEMC Java';
$code = 'Sony';
} elseif (preg_match('/Series60/i', $ua) && !preg_match('/Symbian/i', $ua)) {
$title = 'Nokia S60';
$version = get_browser_version($ua, 'Series60');
$code = 'Nokia';
} elseif (preg_match('/S60/i', $ua) && !preg_match('/Symbian/i', $ua)) {
$title = 'Nokia S60';
$version = get_browser_version($ua, 'S60');
$code = 'Nokia';
} elseif (preg_match('/TencentTraveler/i', $ua)) {
$title = 'TT 浏览器';
$version = get_browser_version($ua, 'TencentTraveler');
$code = 'QQBrowser';
} elseif ((preg_match('/Ubuntu\;\ Mobile/i', $ua) || preg_match('/Ubuntu\;\ Tablet/i', $ua) && preg_match('/WebKit/i', $ua))) {
$title = 'Ubuntu Web Browser';
$code = 'Ubuntu';
} elseif (preg_match('/AppleWebkit/i', $ua) && preg_match('/Android/i', $ua) && !preg_match('/Chrome/i', $ua)) {
$title = 'Android Webkit';
$version = get_browser_version($ua, 'Version');
$code = 'Android-Webkit';
} elseif (preg_match('/Chrome/i', $ua) && preg_match('/Mobile/i', $ua) && (preg_match('/Version/i', $ua) || preg_match('/wv/i', $ua))) {
$title = 'WebView';
$version = get_browser_version($ua, 'Version');
$code = 'Android-Webkit';
}
// Pulled out of order to help ensure better detection for above browsers
elseif (preg_match('/Edge/i', $ua) && preg_match('/Chrome/i', $ua) && preg_match('/Safari/i', $ua)) {
$title = 'Microsoft Edge';
$version = get_browser_version($ua, 'Edge');
$code = 'Edge';
} elseif (preg_match('/Chrome/i', $ua)) {
$title = 'Google Chrome';
$version = get_browser_version($ua, 'Chrome');
$code = 'Chrome';
} elseif (preg_match('/Safari/i', $ua) && !preg_match('/Nokia/i', $ua)) {
$title = 'Safari';
$code = 'Safari';
if (preg_match('/Version/i', $ua)) {
$version = get_browser_version($ua, 'Version');
}
if (preg_match('/Mobile Safari/i', $ua)) {
$title = 'Mobile ' . $title;
}
} elseif (preg_match('/Nokia/i', $ua)) {
$title = 'Nokia Web Browser';
$code = 'Nokia';
} elseif (preg_match('/Firefox/i', $ua)) {
$title = 'Firefox';
$version = get_browser_version($ua, 'Firefox');
} elseif (preg_match('/MSIE/i', $ua) || preg_match('/Trident/i', $ua)) {
$title = 'Internet Explorer';
$code = 'IE';
if (preg_match('/\ rv:([.0-9a-zA-Z]+)/i', $ua)) {
// IE11 or newer
$version = get_browser_version($ua, ' rv');
} else {
// IE10 or older, regex: '/MSIE[\ |\/]?([.0-9a-zA-Z]+)/i'
$version = get_browser_version($ua, 'MSIE');
}
// Detect compatibility mode for IE
if ($version === '7.0' && preg_match('/Trident\/4.0/i', $ua)) {
$version = '8.0 (Compatibility Mode)';
}
} elseif (preg_match('/Mozilla/i', $ua)) {
$title = 'Mozilla';
$version = get_browser_version($ua, ' rv');
if (empty($version)) {
$title .= ' Compatible';
$code = 'Mozilla';
}
}
// No Web browser match
else {
$title = 'Other Browser';
$code = 'Others';
}
if (is_null($code)) {
$code = $title;
}
if ($version != '') {
$title .= " $version";
}
$result['code'] = $code;
$result['title'] = $title;
return $result;
}