246 lines
9.7 KiB
PHP
246 lines
9.7 KiB
PHP
<?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;
|
|
}
|