轻量级设备侦测

虽然我认为网站为移动设备显示的效果应该由CSS的handheld的特性来表现,但是有时候我们还是会用到设备侦测,以减少数据传输或客户端的处理性能要求。侦测设备通常用正经的DeviceAtlasWURFL来实现,但可能你在你的服务器上可能很难配置到它们,或者要求你的服务器处理额外的数据。所以下面有两段比较简单的方法通过侦测用户代理来确定设备情况。如果你想为移动设备显示你网站上经过优化的内容,可以用到它们。

:PHP代码


< ?php$mobile_browser = '0';if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i', strtolower($_SERVER['HTTP_USER_AGENT']))){ $mobile_browser++; }if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))){ $mobile_browser++; }$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));$mobile_agents = array( ‘w3c ‘,’acs-’,'alav’,'alca’,'amoi’,'audi’,'avan’,'benq’,'bird’,'blac’, ‘blaz’,'brew’,'cell’,'cldc’,'cmd-’,'dang’,'doco’,'eric’,'hipt’,'inno’, ‘ipaq’,'java’,'jigs’,'kddi’,'keji’,'leno’,'lg-c’,'lg-d’,'lg-g’,'lge-’, ‘maui’,'maxo’,'midp’,'mits’,'mmef’,'mobi’,'mot-’,'moto’,'mwbp’,'nec-’, ‘newt’,'noki’,'oper’,'palm’,'pana’,'pant’,'phil’,'play’,'port’,'prox’, ‘qwap’,’sage’,’sams’,’sany’,’sch-’,’sec-’,’send’,’seri’,’sgh-’,’shar’, ’sie-’,’siem’,’smal’,’smar’,’sony’,’sph-’,’symb’,'t-mo’,'teli’,'tim-’, ‘tosh’,'tsm-’,'upg1′,’upsi’,'vk-v’,'voda’,'wap-’,'wapa’,'wapi’,'wapp’, ‘wapr’,'webc’,'winw’,'winw’,'xda’,'xda-’);if(in_array($mobile_ua,$mobile_agents)){ $mobile_browser++; }if (strpos(strtolower($_SERVER['ALL_HTTP']),’OperaMini’)>0) { $mobile_browser++; }if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),’windows’)>0) { $mobile_browser=0; }if($mobile_browser>0){ // do something } else { // do something else } ?>

(来自Andy Moore

以及转化成的:ASP代码

< %Option ExplicitDim user_agent, mobile_browser, Regex, match, mobile_agents, mobile_ua, i, sizeuser_agent = Request.ServerVariables("HTTP_USER_AGENT")mobile_browser = 0Set Regex = New RegExpWith Regex .Pattern = "(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|windows ce|pda|mobile|mini|palm)" .IgnoreCase = True .Global = TrueEnd Withmatch = Regex.Test(user_agent)If match Then mobile_browser = mobile_browser+1If InStr(Request.ServerVariables("HTTP_ACCEPT"), "application/vnd.wap.xhtml+xml") Or Not IsEmpty(Request.ServerVariables("HTTP_X_PROFILE")) Or Not IsEmpty(Request.ServerVariables("HTTP_PROFILE")) Then mobile_browser = mobile_browser+1end Ifmobile_agents = Array("w3c ", "acs-", "alav", "alca", "amoi", "audi", "avan", "benq", "bird", "blac", "blaz", "brew", "cell", "cldc", "cmd-", "dang", "doco", "eric", "hipt", "inno", "ipaq", "java", "jigs", "kddi", "keji", "leno", "lg-c", "lg-d", "lg-g", "lge-", "maui", "maxo", "midp", "mits", "mmef", "mobi", "mot-", "moto", "mwbp", "nec-", "newt", "noki", "oper", "palm", "pana", "pant", "phil", "play", "port", "prox", "qwap", "sage", "sams", "sany", "sch-", "sec-", "send", "seri", "sgh-", "shar", "sie-", "siem", "smal", "smar", "sony", "sph-", "symb", "t-mo", "teli", "tim-", "tosh", "tsm-", "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi", "wapp", "wapr", "webc", "winw", "winw", "xda", "xda-")size = Ubound(mobile_agents)mobile_ua = LCase(Left(user_agent, 4))For i=0 To size If mobile_agents(i) = mobile_ua Then mobile_browser = mobile_browser+1 Exit For End IfNextIf mobile_browser>0 Then Response.Write(”Mobile!”)Else Response.Write(”Not mobile!”)End If%>

标签:

2008年2月23日 文章, 编码和结构 一条评论