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;
 | |
| }
 |