detect MSIE 11 on Win8 in both a 'leaked' UA string version and an actually seen one
authorRobert Kaiser <kairo@kairo.at>
Thu, 27 Jun 2013 23:36:40 +0000 (01:36 +0200)
committerRobert Kaiser <kairo@kairo.at>
Thu, 27 Jun 2013 23:36:40 +0000 (01:36 +0200)
include/classes/useragent.php-class
testbed/ua_list_raw.txt

index 4afd3e8..5a4b358 100755 (executable)
@@ -965,6 +965,11 @@ class userAgent {
       $this->version = "10.0";
       $this->bot = false;
     }
+    elseif (preg_match('|Trident\/[0-9a-zA-Z\.+]+; ([^\)]+; )?rv:([0-9\.+]+)|', $this->uastring, $regs)) {
+      $this->brand = 'Microsoft Internet Explorer';
+      $this->version = $regs[2];
+      $this->bot = false;
+    }
     elseif (preg_match('|MSIE ([0-9a-zA-Z\.+]+)|', $this->uastring, $regs)) {
       $this->brand = 'Microsoft Internet Explorer';
       $this->version = $regs[1];
@@ -1210,7 +1215,17 @@ class userAgent {
           }
         }
         elseif ($this->hasEngine('trident') || $this->hasEngine('tasman')) {
-          if (preg_match('/Mozilla\/[^\(]+ \(compatible *; MSIE [^;]+[^\)]*; ?((?:Mac|Win)[^;]+); ?(Win64|WOW64)[^\)]*Trident\/([^;\)]+)[^\)]*\)/i', $this->uastring, $regs)) {
+          if (preg_match('/Mozilla\/[^\(]+ \((IE [^;]+[^\)]*; )?((?:Mac|Win)[^;]+); ?(Win64|WOW64); ?Trident\/([^;\)]+);/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[4];
+            $this->uadata['os'] = $regs[2].' ('.$regs[3].')';
+            $this->uadata['lang'] = null;
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \((IE [^;]+[^\)]*; )?((?:Mac|Win)[^;]+); ?Trident\/([^;\)]+);/i', $this->uastring, $regs)) {
+            $this->uadata['eng_version'] = $regs[3];
+            $this->uadata['os'] = $regs[2];
+            $this->uadata['lang'] = null;
+          }
+          elseif (preg_match('/Mozilla\/[^\(]+ \(compatible *; MSIE [^;]+[^\)]*; ?((?:Mac|Win)[^;]+); ?(Win64|WOW64)[^\)]*Trident\/([^;\)]+)[^\)]*\)/i', $this->uastring, $regs)) {
             $this->uadata['eng_version'] = $regs[3];
             $this->uadata['os'] = $regs[1].' ('.$regs[2].')';
             $this->uadata['lang'] = null;
@@ -1462,6 +1477,9 @@ class userAgent {
         elseif ($this->uadata['os'] == 'Windows NT 6.2') { $this->uadata['os'] = 'Windows 8'; }
         elseif ($this->uadata['os'] == 'Windows NT 6.2 (Win64)') { $this->uadata['os'] = 'Windows 8 (64bit)'; }
         elseif ($this->uadata['os'] == 'Windows NT 6.2 (WOW64)') { $this->uadata['os'] = 'Windows 8 (64bit)'; }
+        elseif ($this->uadata['os'] == 'Windows NT 6.3') { $this->uadata['os'] = 'Windows 8.1'; }
+        elseif ($this->uadata['os'] == 'Windows NT 6.3 (Win64)') { $this->uadata['os'] = 'Windows 8.1 (64bit)'; }
+        elseif ($this->uadata['os'] == 'Windows NT 6.3 (WOW64)') { $this->uadata['os'] = 'Windows 8.1 (64bit)'; }
         elseif ($this->uadata['os'] == 'Win95') { $this->uadata['os'] = 'Windows 95'; }
         elseif ($this->uadata['os'] == 'Win98') { $this->uadata['os'] = 'Windows 98'; }
         elseif ($this->uadata['os'] == 'WinNT') { $this->uadata['os'] = 'Windows NT'; }
@@ -1516,7 +1534,7 @@ class userAgent {
         if (strpos($this->uadata['os'], 'Windows Phone OS') !== false) { $this->mobile = true; }
         elseif (strpos($this->uadata['os'], 'Gameboy') !== false) { $this->mobile = true; }
 
-        $this->uadata['lang'] = str_replace('_', '-', $this->uadata['lang']);
+        $this->uadata['lang'] = str_replace('_', '-', @$this->uadata['lang']);
       }
     }
   return $this->uadata['os'];
index 431018a..c11001d 100755 (executable)
@@ -134,6 +134,8 @@ Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
 Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
 Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0)
 Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)
+Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
+Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko
 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)