在PHP中检测Android浏览器(从v1到2.3固件)


Detecting Android Browser (from v. 1 to 2.3 firmware) in PHP

我需要检测浏览器是否为Android(仅从1到2.3版本),这会工作吗?

if(preg_match('/Android [1-2.3]/', $_SERVER['HTTP_USER_AGENT'])) {
 echo 'something';
}

下面的Regex可以完全匹配Android [1-2.3]

Android ([1](?:'.[0-9])?|[2](?:'.[0-3])?$)

For MSIE [6-8] Android [1-2.3]

MSIE [6-8] Android ([1](?:'.[0-9])?|[2](?:'.[0-3])?)$

在这里运行正则表达式

我真的不知道这些设备的UserAgents看起来像什么,但是您拥有的模式不太可能是您想要的。我猜你想要一些类似于

的东西。
'/Android (1'.'d|2'.[012])/'

有很多不同的方式可以写模式,但本质上说,Android需要后跟1.{any number}2.0, 2.1 or 2.2

我建议您使用Browscap进行浏览器检测。

get_browser函数文档http://php.net/manual/en/function.get-browser.php

'Actual' browscap .ini文件下载http://tempdownloads.browserscap.com

需要注意的是,该项目目前已关闭,并将进一步更新浏览器数据库。

用法示例:

$browser = get_browser(null, true);
if (array_key_exists('Platform', $browser) && array_key_exists('Platform_Version', $browser) && $browser['Platform'] == 'Android' && $browser['Platform_Version'] <= 2.3) {
    echo 'Android <2.3 version';
}

您可以使用以下正则表达式来获取Android浏览器版本,无论是x.x.x格式还是x.x格式。我有一个正则表达式来确定设备是否使用我支持的版本之一(2.3)。x +):

/Android ([2].?[3-9].?[0-9]?|[3].?[0-9].?[0-9]?|[4].?[0-9].?[0-9]?)/

从github我发现这段代码非常有用:https://gist.github.com/Abban/3939726

if(is_old_android('2.3')) {
  echo 'This device has Android 2.3 or lower';
}
function is_old_android($version = '4.0.0'){
   if(strstr($_SERVER['HTTP_USER_AGENT'], 'Android')){
     preg_match('/Android ('d+(?:'.'d+)+)[;)]/', $_SERVER['HTTP_USER_AGENT'], $matches);
     // $matches[0]= Android 4.1.2;
     // $matches[1]= 4.1.2
        return version_compare($matches[1], $version, '<=');
    }
}
非常有用的函数:version_compare