在PHP中检测Android浏览器(从v.1到2.3固件)
我需要检测浏览器是否为Android(仅从1版到2.3版),这是否可行在PHP中检测Android浏览器(从v.1到2.3固件),php,regex,preg-match,browser-detection,Php,Regex,Preg Match,Browser Detection,我需要检测浏览器是否为Android(仅从1版到2.3版),这是否可行 if(preg_match('/Android [1-2.3]/', $_SERVER['HTTP_USER_AGENT'])) { echo 'something'; } 我真的不知道这些设备的用户代理是什么样子的,但您拥有的模式不太可能是您想要的。我想你还需要更多的东西: '/Android (1\.\d|2\.[012])/' 有很多不同的方法可以编写模式,但本质上这一种方法说,Android后面需要紧跟1.{a
if(preg_match('/Android [1-2.3]/', $_SERVER['HTTP_USER_AGENT'])) {
echo 'something';
}
我真的不知道这些设备的用户代理是什么样子的,但您拥有的模式不太可能是您想要的。我想你还需要更多的东西:
'/Android (1\.\d|2\.[012])/'
有很多不同的方法可以编写模式,但本质上这一种方法说,
Android
后面需要紧跟1.{anynumber}
或2.0、2.1或2.2
下面的Regex可以精确匹配Android[1-2.3]
Android([1](?:\[0-9])?|[2](?:\[0-3])?$)
对于MSIE[6-8]Android[1-2.3]
MSIE[6-8]Android([1](?:\[0-9])?\[2](?:\[0-3])$
我建议您使用Browscap进行浏览器检测
获取浏览器
功能文档
“实际”browscap.ini文件下载
应注意的是,该项目目前已结束,正在对浏览器数据库进行进一步更新
在您的案例中的用法示例:
$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';
}
$browser=get\u browser(null,true);
如果(array_key_存在('Platform',$browser)&&array_key_存在('Platform_Version',$browser)&&$browser['Platform']=='Android'&&browser['Platform_Version']您可以使用以下正则表达式获取Android浏览器版本,无论是x.x.x格式还是x.x格式。我有一个正则表达式来确定设备是否使用我支持的其中一个版本(2.3.x+):
在github中,我发现这段代码非常有用:
if(是旧的安卓系统('2.3')){
echo“此设备具有Android 2.3或更低版本”;
}
函数是旧的安卓($version='4.0.0'){
if(strstr($_SERVER['HTTP\u USER\u AGENT','Android')){
preg\u match('/Android(\d+(?:\.\d+++)[;)]/',$\u服务器['HTTP\u用户代理],$matches);
//$matches[0]=Android 4.1.2;
//$matches[1]=4.1.2
返回版本\u比较($matches[1],$version,'不。正则表达式引擎不知道版本号的范围是如何工作的,不是吗?你也在误用字符类,即使它只是你试图匹配的一个数字范围。这将匹配Android 1
,Android 2
,Android。
和Android 3
。事实上,如果其中任何一个匹配,它都会匹配是输入的子字符串(因此它也将匹配Android2.5
)。您能告诉我们输入中可能显示的实际版本号吗?好的,我需要对不支持SVG的Android版本(因此所有版本都<2.3)进行回退。这在这里没有真正的帮助。一个“坏”列表版本号也将匹配Android 2.4
这个呢?/Android[12]\.\d/@multiformingegno也将匹配任何版本2.*
谢谢!:)最后一个问题,我如何将这个正则表达式与/MSIE[6-8]/?它应该类似于if(preg\u match('/MSIE[6-8];Android[1](?:\[0-9]);Android[2](?:\[0-3])“?$/”,$服务器['HTTP\U用户\U代理]))正确:)@multiformingegno这将像MSIE[6-8](Android[1](?:\[0-9])?;Android[2](?:\[0-3])?$)
调整中间的空格。
/Android ([2].?[3-9].?[0-9]?|[3].?[0-9].?[0-9]?|[4].?[0-9].?[0-9]?)/
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, '<=');
}
}