From ff8d4ab22be7a962dbc57496459a4c5fd16c8d2d Mon Sep 17 00:00:00 2001 From: Robert Kaiser Date: Fri, 27 Jan 2012 19:45:31 +0100 Subject: [PATCH] add another group of mobile browser UAs and detect them correctly - including the upcoming Fennec UA --- include/classes/useragent.php-class | 78 ++++++++++++++++++++++------- testbed/ua_list_raw.txt | 33 +++++++++++- 2 files changed, 93 insertions(+), 18 deletions(-) diff --git a/include/classes/useragent.php-class b/include/classes/useragent.php-class index a32e5f0..a7a137c 100755 --- a/include/classes/useragent.php-class +++ b/include/classes/useragent.php-class @@ -357,8 +357,38 @@ class userAgent { $this->version = $regs[1]; $this->bot = false; } + elseif (preg_match('|wOSBrowser/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + $this->brand = 'webOS Browser'; + $this->version = $regs[1]; + $this->bot = false; + } + elseif (preg_match('|Silk/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + $this->brand = 'Silk'; + $this->version = $regs[1]; + $this->bot = false; + } + elseif (preg_match('|Kindle/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + $this->brand = 'Kindle'; + $this->version = $regs[1]; + $this->bot = false; + } + elseif (preg_match('|Pre/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + $this->brand = 'Pre'; + $this->version = $regs[1]; + $this->bot = false; + } + elseif (preg_match('|BOLT/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + $this->brand = 'BOLT'; + $this->version = $regs[1]; + $this->bot = false; + } elseif (preg_match('|Safari/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { - $this->brand = 'Safari'; + if (preg_match('| Mobile(/[0-9a-zA-Z\.+]+)? Safari/|', $this->uastring)) { + $this->brand = 'Mobile Safari'; + } + else { + $this->brand = 'Safari'; + } if (preg_match('|Version/([0-9a-zA-Z\.+]+)|', $this->uastring, $vregs)) { $this->version = $vregs[1]; } @@ -968,7 +998,8 @@ class userAgent { if (!$this->bot) { if (preg_match('|Gecko/([0-9]+)|', $this->uastring, $regs) && (strpos($this->brand, 'Opera') === false)) { $this->uadata['engine'] = 'gecko'; - $this->uadata['geckodate'] = $regs[1]; + // If it looks like a version number, i.e. shorter than 4 chars or has a . in it, it's no date. + $this->uadata['geckodate'] = ((strlen($regs[1]) > 4) && (strpos($regs[1], '.') === false))?$regs[1]:null; } elseif ((strpos($this->brand, 'Internet Explorer') !== false) || (strpos($this->brand, 'FrontPage') !== false)) { if ((strpos(strtolower($this->uastring), 'mac') !== false) && (intval($this->getVersion()) >= 5)) { @@ -978,8 +1009,9 @@ class userAgent { $this->uadata['engine'] = 'trident'; } } - elseif (preg_match('|WebKit/([0-9]+)|', $this->uastring, $regs)) { + elseif (preg_match('|WebKit/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { $this->uadata['engine'] = 'webkit'; + $this->uadata['eng_version'] = $regs[1]; } elseif ((strpos($this->brand, 'Konqueror') !== false) || (strpos($this->brand, 'OmniWeb') !== false)) { $this->uadata['engine'] = 'khtml'; @@ -996,6 +1028,9 @@ class userAgent { elseif (strpos($this->brand, 'Opera') !== false) { $this->uadata['engine'] = 'presto'; } + elseif ((strpos($this->brand, 'iTunes') !== false) || (strpos($this->brand, 'nook browser') !== false)) { + $this->uadata['engine'] = 'webkit'; + } elseif (strpos($this->brand, 'Dillo') !== false) { $this->uadata['engine'] = 'gzilla'; } @@ -1008,6 +1043,10 @@ class userAgent { elseif ((strpos($this->brand, 'ICEbrowser') !== false) || (strpos($this->brand, 'ICE Browser') !== false)) { $this->uadata['engine'] = 'icestorm'; } + elseif (preg_match('|NetFront/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + $this->uadata['engine'] = 'netfront'; + $this->uadata['eng_version'] = $regs[1]; + } elseif ((strpos($this->brand, 'PlayStation') !== false) || (strpos($this->brand, 'NetFront') !== false)) { $this->uadata['engine'] = 'netfront'; } @@ -1083,7 +1122,7 @@ class userAgent { $this->uadata['lang'] = $regs[3]; $this->uadata['eng_version'] = null; } - elseif (preg_match('|Mozilla/5.0 \(([^;]+); (WOW64); rv:([^\);]+)\)|', $this->uastring, $regs)) { + elseif (preg_match('#Mozilla/5.0 \(([^;]+); (WOW64|Mobile|Tablet); rv:([^\);]+)\)#', $this->uastring, $regs)) { $this->uadata['os'] = $regs[1].' ('.$regs[2].')'; $this->uadata['lang'] = null; $this->uadata['eng_version'] = $regs[3]; @@ -1174,12 +1213,11 @@ class userAgent { } } elseif ($this->hasEngine('webkit')) { - if (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^;]+); ([^;]+); ([^\);]+)\) AppleWebKit/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + if (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^\);]+); ([^\);]+); ([^\);]+)\)|', $this->uastring, $regs)) { $this->uadata['os'] = $regs[2]; $this->uadata['lang'] = $regs[3]; - $this->uadata['eng_version'] = $regs[5]; } - elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^;]+); ([^\);]+)\) AppleWebKit/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^\);]+); ([^\);]+)\)|', $this->uastring, $regs)) { if (strpos($regs[3], '/') !== false) { $this->uadata['os'] = $regs[1]; $this->uadata['lang'] = null; @@ -1188,15 +1226,17 @@ class userAgent { $this->uadata['os'] = $regs[2]; $this->uadata['lang'] = $regs[3]; } - $this->uadata['eng_version'] = $regs[4]; } - elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^\);]+)\) AppleWebKit/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + elseif (preg_match('|Mozilla/5.0 \(([^;]+); Linux; ([^;]+); U; ([^\);]+)\)|', $this->uastring, $regs)) { + $this->uadata['os'] = $regs[2]; + $this->uadata['lang'] = $regs[3]; + } + elseif (preg_match('|Mozilla/5.0 \(([^;]+); U; ([^\);]+)\)|', $this->uastring, $regs)) { $this->uadata['os'] = $regs[1]; $this->uadata['lang'] = $regs[2]; - $this->uadata['eng_version'] = $regs[3]; } - elseif (preg_match('|Mozilla/5.0 \(([^;]+); ([^\);]+)\) AppleWebKit/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { - if (($regs[1] == 'X11') || ($regs[1] == 'Macintosh')) { + elseif (preg_match('|Mozilla/5.0 \(([^\);]+); ([^\);]+)\)|', $this->uastring, $regs)) { + if (($regs[1] == 'X11') || ($regs[1] == 'Macintosh') || ($regs[1] == 'iPhone')) { $this->uadata['os'] = $regs[2]; } else { @@ -1206,17 +1246,18 @@ class userAgent { } } $this->uadata['lang'] = null; - $this->uadata['eng_version'] = $regs[3]; } - elseif (preg_match('|Mozilla/5.0 \(([^\);]+)\) AppleWebKit/([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) { + elseif (preg_match('|Mozilla/5.0 \(([^\);]+)\)|', $this->uastring, $regs)) { $this->uadata['os'] = $regs[1]; $this->uadata['lang'] = null; - $this->uadata['eng_version'] = $regs[2]; } - elseif (preg_match('|Midori/[^\(]+ \((?:X11; )?([^;]+); U; ([^\)]+)\) WebKit/([0-9a-zA-Z\.+]+)|i', $this->uastring, $regs)) { + elseif (preg_match('|Midori/[^\(]+ \((?:X11; )?([^;]+); U; ([^\)]+)\)|i', $this->uastring, $regs)) { $this->uadata['os'] = $regs[1]; $this->uadata['lang'] = $regs[2]; - $this->uadata['eng_version'] = $regs[3]; + } + if ($this->brand == 'Silk') { + // For some reason, Amazon spoofs us and tells us it's on MacOS X! + $this->uadata['os'] = 'Android'; } } elseif ($this->hasEngine('presto')) { @@ -1366,6 +1407,7 @@ class userAgent { elseif (strpos($this->uadata['os'], 'Darwin') !== false) { $this->uadata['os'] = 'MacOS X'; } elseif (strpos($this->uadata['os'], 'apple') !== false) { $this->uadata['os'] = 'MacOS'; } elseif (strpos($this->uadata['os'], 'Macintosh') !== false) { $this->uadata['os'] = 'MacOS'; } + elseif (preg_match('/(?:web|hpw)OS\/([0-9a-zA-Z\._+]+)/i', $this->uadata['os'], $regs)) { $this->uadata['os'] = 'webOS '.$regs[1]; } elseif (preg_match('/Android \(Linux (.+)\)/i', $this->uadata['os'], $regs)) { $this->uadata['os'] = 'Android '.$regs[1]; } elseif (strpos($this->uadata['os'], 'linux') !== false) { $this->uadata['os'] = 'Linux'; } elseif (preg_match('/SymbianOS[\/ ]([0-9a-zA-Z\._+]+)/i', $this->uastring, $regs)) { $this->uadata['os'] = 'SymbianOS '.$regs[1]; } @@ -1376,6 +1418,7 @@ class userAgent { elseif (strpos($this->uadata['os'], 'iOS') !== false) { $this->uadata['platform'] = 'Macintosh'; } elseif (strpos($this->uadata['os'], 'Linux') !== false) { $this->uadata['platform'] = 'Linux'; } elseif (strpos($this->uadata['os'], 'MeeGo') !== false) { $this->uadata['platform'] = 'Linux'; } + elseif (strpos($this->uadata['os'], 'webOS') !== false) { $this->uadata['platform'] = 'Linux'; } elseif (strpos($this->uadata['os'], 'Android') !== false) { $this->uadata['platform'] = 'Android'; } elseif (strpos($this->uadata['os'], 'Solaris') !== false) { $this->uadata['platform'] = 'Solaris'; } elseif (strpos($this->uadata['os'], 'SunOS') !== false) { $this->uadata['platform'] = 'Solaris'; } @@ -1394,6 +1437,7 @@ class userAgent { elseif (strpos($this->uadata['os'], 'Warp') !== false) { $this->uadata['platform'] = 'OS/2'; } elseif (strpos($this->uadata['os'], 'OS/2') !== false) { $this->uadata['platform'] = 'OS/2'; } elseif (strpos($this->uadata['os'], 'SymbianOS') !== false) { $this->uadata['platform'] = 'SymbianOS'; } + elseif (strpos($this->uadata['os'], 'BlackBerry') !== false) { $this->uadata['platform'] = 'BlackBerry'; } elseif (strpos($this->uadata['os'], 'Gameboy') !== false) { $this->uadata['platform'] = 'Nintendo'; } elseif (strpos($this->uadata['os'], 'Wii') !== false) { $this->uadata['platform'] = 'Nintendo'; } elseif (strpos($this->uadata['os'], 'Nintendo') !== false) { $this->uadata['platform'] = 'Nintendo'; } diff --git a/testbed/ua_list_raw.txt b/testbed/ua_list_raw.txt index 3717215..dfdc72c 100755 --- a/testbed/ua_list_raw.txt +++ b/testbed/ua_list_raw.txt @@ -51,6 +51,8 @@ Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Mozilla/5.0 (X11; Linux i686; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre +Mozilla/5.0 (Android; Mobile; rv:12.0) Gecko/12.0 Firefox/12.0 +Mozilla/5.0 (Android; Tablet; rv:14.0a1) Gecko/14 Firefox/14.0a1 Mozilla/5.0 (Android; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1 Mozilla/5.0 (Android; Linux armv7l; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre Fennec/2.0b1pre Mozilla/5.0 (Android; Linux armv7l; rv:12.0a1) Gecko/20120125 Firefox/12.0a1 Fennec/12.0a1 @@ -120,7 +122,6 @@ Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .N Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0) Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) -Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DeviceManufacturer;DeviceModel) Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 176x220) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Hotbar 4.5.1.0; MSN 6.1; MSNbMSFT; MSNmen-au; MSNc00; v5m) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; MSN 9.0;MSN 9.1; MSNbVZ02; MSNmen-us; MSNcOTH; MPLUS) @@ -135,6 +136,10 @@ Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Crazy Browser 1.0.5) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; iRider 2.10.0008) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; Maxthon; .NET CLR 1.0.3705; .NET CLR 1.1.4322) +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; MAAR; .NET4.0C) +Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DELL; Venue Pro) +Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800) +Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7) Microsoft Pocket Internet Explorer/0.6 Mozilla/1.1 (compatible; MSPIE 2.0; Windows CE) Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320) @@ -155,8 +160,20 @@ Mozilla/5.0 (compatible; Konqueror/3.4; Linux) KHTML/3.4.0 (like Gecko) Mozilla/5.0 (compatible; Konqueror/3.3; Linux; X11; i686; es, en_US) KHTML/3.3.2 (like Gecko) Mozilla/5.0 (Windows; U; Windows NT 5.1; de) AppleWebKit/522.13.1 (KHTML, like Gecko) Version/3.0.2 Safari/522.13.1 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/51 (like Gecko) Safari/51 +Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 Mozilla/5.0 (iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10 +Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5 +Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3 +Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 +Mozilla/5.0 (Linux; U; Android 2.2.1; fr-ch; A43 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 +Mozilla/5.0 (BlackBerry; U; BlackBerry 9860; en-GB) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.296 Mobile Safari/534.11+ +Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; Nexus S Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 +HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 +Mozilla/5.0 (Linux; U; Android 2.2; en-us; DROID2 Build/VZW) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 480X854 motorola DROID2 +Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 +Mozilla/5.0 (Linux; U; Android 3.0.1; de-de; GT-P7100 Build/HRI83) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 MobileSafari/534.13 Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF 101 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13 +Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13 Mozilla/4.0 (compatible; MSIE 5.12; Mac_PowerPC) OmniWeb/4.1.1-v424.6 Mozilla/4.5 (compatible; OmniWeb/4.1.1-v423; Mac_PowerPC) Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v540 @@ -170,10 +187,17 @@ Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14. Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.51 (KHTML, like Gecko; Google Web Preview) Chrome/12.0.742 Safari/534.51 Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1/21.0.025; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 +Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE63-3/100.21.110; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 +Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600X800; rotate) Mozilla/5.0 (webOS/1.1; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0 +Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0 +Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-84) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true Midori/0.1.9 (X11; Linux i686; U; en-us) WebKit/532+ Mozilla/5.0 (X11; U; Linux x86_64; cs-cz) AppleWebKit/531.2+ (KHTML, like Gecko) Safari/531.2+ Epiphany/2.27.91 SUSE/2.27.91-1.2 Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13 +Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.800) AppleWebKit/534.6 (KHTML, like Gecko) Version/5.0 Safari/534.6.3 +iTunes/9.1.1 +nook browser/1.0 Opera/5.12 (Windows 2000; U) [de] Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.05 [ja] Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i586) Opera 7.23 [en] @@ -184,6 +208,7 @@ Mozilla/4.0 (compatible; MSIE 6.0; Mac_PowerPC Mac OS X; en) Opera 8.0 Opera/8.00 (Windows NT 5.1; U; en) Opera/8.01 (X11; Linux i686; U; de) Opera/9.30 (Nintendo Wii; U; ; 3642; en) +Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [en Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [ja] Mozilla/5.0 (X11; Linux i686; U; en) Opera 8.01 Mozilla/5.0 (Windows NT 5.2; U; cs; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.20 Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 6.0 [de] @@ -193,9 +218,13 @@ Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; Nokia 6630/4.03.38; 6937) Opera 8 Mozilla/4.0 (compatible; MSIE 6.0; ; Linux armv5tejl; U) Opera 8.02 [en_US] Maemo browser 0.4.31 N770/SU-18 Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [ja] Opera/9.00 (Wii; U; ; 1038-58; Wii Shop Channel/1.0; en) +Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en) +Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; en-GB) Presto/2.4.18 Version/10.00 Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr) Opera/2.0.3920 (J2ME/MIDP; Opera Mini; en; U; ssr) Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14881Mod.by.Handler/960; U; en) Presto/2.2.0 +XV6850 Opera/9.50 (Windows NT 5.1; U; en) +HTC-ST7377/1.59.502.3 (67150) Opera/9.50 (Windows NT 5.1; U; en) UP.Link/6.3.1.17.0 Mozilla/4.75 [de] (Win98; U) Mozilla/1.6 [en] (Windows NT 5.1; U) Mozilla/1.0 (CP/M; 8-bit .NET) @@ -252,6 +281,7 @@ w3m/0.5.1 BlackBerry8120/4.3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/135 SonyEricssonK700i/R2AE SEMC-Browser/4.0.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.2.3.15.0 (Google WAP Proxy/1.0) SonyEricssonT610/R201 Profile/MIDP-1.0 Configuration/CLDC-1.0 (Google WAP Proxy/1.0) +BlackBerry9700/5.0.0.351 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/123 Nokia3510i/1.0 (04.01) Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1.5a (Google WAP Proxy/1.0) Nokia7650/1.0 SymbianOS/6.1 Series60/0.9 Profile/MIDP-1.0 Configuration/CLDC-1.0 (Google WAP Proxy/1.0) Nokia6630/1.0 (3.45.113) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1 (Google WAP Proxy/1.0) @@ -259,6 +289,7 @@ SIE-C60/12 UP.Browser/6.1.0.5.c.6 (GUI) MMP/1.0 (Google WAP Proxy/1.0) OPWV-SDK/62 UP.Browser/6.2.2.1.208 (GUI) MMP/2.0 Vodafone/1.0/LG-HB620T/V10a Browser/Obigo-Q05A/3.12 MMS/LG-MMS-V1.0/1.2 Java/ASVM/1.1 Profile/MIDP-2.1 Configuration/CLDC-1.1 Mozilla/4.0 (MobilePhone MM-8300/US/1.0) NetFront/3.1 MMP/2.0 +Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800) Samsung-SPHA920 AU-MIC-A920/2.0 MMP/2.0 MOT-E398/0E.20.59R MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0 Mozilla/4.0 (compatible; 240x320) IXI/Q05A2.4 -- 2.43.0