null, 'version' => null, 'os' => null, 'is_mobile' => null, 'is_tablet' => null, ); if (is_null($ua)) { return $result; } // Try to guess the OS. if (preg_match('#(Windows|Android|Linux|iOS|OS X|Macintosh)#i', $ua, $matches)) { if ($matches[1] === 'Linux' && strpos($ua, 'Android') !== false) { $matches[1] = 'Android'; } if ($matches[1] === 'Macintosh' && strpos($ua, 'OS X') !== false) { $matches[1] = 'OS X'; } $result->os = $matches[1]; } // Fill in miscellaneous fields. $result->is_mobile = self::isMobile($ua); $result->is_tablet = self::isTablet($ua); // Try to match some of the most common browsers. if (preg_match('#Android ([0-9]+\\.[0-9]+)#', $ua, $matches) && strpos($ua, 'Chrome') === false) { $result->browser = 'Android'; $result->version = $matches[1]; return $result; } if (preg_match('#Edge/([0-9]+\\.)#', $ua, $matches)) { $result->browser = 'Edge'; $result->version = $matches[1] . '0'; return $result; } if (preg_match('#Trident/([0-9]+)\\.[0-9]+#', $ua, $matches)) { $result->browser = 'IE'; $result->version = ($matches[1] + 4) . '.0'; return $result; } if (preg_match('#(MSIE|Chrome|Firefox|Safari)[ /:]([0-9]+\\.[0-9]+)#', $ua, $matches)) { $result->browser = $matches[1] === 'MSIE' ? 'IE' : $matches[1]; $result->version = $matches[2]; return $result; } if (preg_match('#^Opera/.+(?:Opera |Version/)([0-9]+\\.[0-9]+)$#', $ua, $matches)) { $result->browser = 'Opera'; $result->version = $matches[1]; return $result; } if (preg_match('#(?:Konqueror|KHTML)/([0-9]+\\.[0-9]+)$#', $ua, $matches)) { $result->browser = 'Konqueror'; $result->version = $matches[1]; return $result; } return $result; } }