GitHub 上有类库: https://github.com/serbanghita/Mobile-Detect;
不用看下面的了。。。
最近要做一个api,返回内容要区分pc还是wap,于是想到了用 http 请求头的 user-agent 来判断。
难点在于移动端设备繁多,浏览器几乎一种设备一个版本,要全部兼容判断,有难度。于是,在网上搜罗了很多资料,尽量把各个版本的浏览器的user-agent都兼容起来,写了如下代码。不过兼容性和准确性有待各位检验,哈哈。发现bug或有不足之处请留言,尽量修改完善,让后来人少走弯路。
//判断移动端
function isMobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) return true;
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA']) && stristr($_SERVER['HTTP_VIA'], "wap")) {
return true;
}
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$mobile_agents = array ('iphone','android','phone','mobile','wap','netfront','java','opera mobi',
'opera mini','ucweb','windows ce','symbian','series','webos','sony','blackberry','dopod',
'nokia','samsung','palmsource','xda','pieplus','meizu','midp','cldc','motorola','foma',
'docomo','up.browser','up.link','blazer','helio','hosin','huawei','novarra','coolpad',
'techfaith','alcatel','amoi','ktouch','nexian','ericsson','philips','sagem','wellcom',
'bunjalloo','maui','smartphone','iemobile','spice','bird','zte-','longcos','pantech',
'gionee','portalmmm','jig browser','hiptop','benq','haier','^lct','320x320','240x320',
'176x220','windows phone','cect','compal','ctl','lg','nec','tcl','daxian','dbtel','eastcom',
'konka','kejian','lenovo','mot','soutec','sgh','sed','capitel','panasonic','sonyericsson',
'sharp','panda','zte','acer','acoon','acs-','abacho','ahong','airness','anywhereyougo.com',
'applewebkit/525','applewebkit/532','asus','audio','au-mic','avantogo','becker','bilbo',
'bleu','cdm-','danger','elaine','eric','etouch','fly ','fly_','fly-','go.web','goodaccess',
'gradiente','grundig','hedy','hitachi','htc','hutchison','inno','ipad','ipaq','ipod',
'jbrowser','kddi','kgt','kwc','lg ','lg2','lg3','lg4','lg5','lg7','lg8','lg9','lg-','lge-',
'lge9','maemo','mercator','meridian','micromax','mini','mitsu','mmm','mmp','mobi','mot-',
'moto','nec-','newgen','nf-browser','nintendo','nitro','nook','obigo','palm','pg-',
'playstation','pocket','pt-','qc-','qtek','rover','sama','samu','sanyo','sch-','scooter',
'sec-','sendo','sgh-','siemens','sie-','softbank','sprint','spv','tablet','talkabout',
'tcl-','teleca','telit','tianyu','tim-','toshiba','tsm','utec','utstar','verykool','virgin',
'vk-','voda','voxtel','vx','wellco','wig browser','wii','wireless','xde','pad','gt-p1000');
$is_mobile = false;
foreach ($mobile_agents as $device) {
if (stristr($user_agent, $device)) {
$is_mobile = true;
break;
}
}
return $is_mobile;
}