本日志标题:如何判断网站客户端是手机还是电脑?        [2011-11-1]

如今智能手机越来越普及,用户通过移动终端上网的频率也越来越高,用户的电脑上网习惯也随之转移到手机上网。

然而受手机屏幕以及相关手机浏览器的影响,很多网站在手机端的表现差强人意,所以我们会考虑设计WAP版。当然常用的办法是告知用户WAP入口地址,但这不能从无缝转移的角度来解决问题。所以我们会考虑到判断当前客户端的情况来进行有选择的推送网站版面。

如何判断网站客户端是手机还是电脑就成了目标关键。搜索诸多文章都推荐了使用“User-Agent”进行嗅探。“User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。”


<%request.ServerVariables("HTTP_USER_AGENT")%>
<?$_SERVER['HTTP_USER_AGENT']?>


获得的第一参数可以看到电脑显示为compatible,iphone显示为iphone,cpu iphone OS;摩托罗拉M2525显示为Linux,Android MB525 Build。而诸如诺基亚6300则不显示任何信息,当然,因为任何电脑都会有HTTP_USER_AGENT信息,如果值为空也可以判断为手机。

所以简单办法是获取所有手机端的User-Agent信息入库,以备对客户端的校验。

已检测成功的ASP版


<%
set regex = new regexp
regex.ignorecase = true
regex.global = true
regex.pattern = "mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo|iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile|ipod|iphone|android|opera mini|blackberry|palm os|palm|hiptop|avantgo|fennec|plucker|xiino|blazer|elaine|iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile"

agent = request.ServerVariables("HTTP_USER_AGENT")
if agent <> "" then
    if regex.test(agent) then
        response.redirect("WAP网址")
    end If
Else
    response.redirect("未能获取HTTP_USER_AGENT值,同样跳转到WAP网址")
end if
%>



未监测的PHP版


function is_wap(){
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
$uachar = "/(nokia|sony|ericsson|mot|samsung|sgh|lg|sie|philips|panasonic|alcatel|lenovo|cldc|midp|wap|mobile)/i";
if(($ua == '' || preg_match($uachar, $ua))&& !strpos(strtolower($_SERVER['REQUEST_URI']),'wap')){
return true;
}else{
return false;
}
}



以上的ASP段代码检测在诺基亚、苹果、三星、摩托罗拉、HTC、黑莓及部分安卓山寨机上测试访问均自动跳转至WAP站点。

后来考虑到ipad端因为屏幕已经够大,正常WEB浏览也无大碍,所以可以考虑不跳转到WAP站的思路总结出:

判断客户端是电脑还是手机的目的是为了让用户能看到适合的屏幕内容,那么我们为什么不来判断客户端的分辨率进行有选择的跳转呢?

所以,最终考虑分辨率小于480的终端均跳转到WAP页面。



<script type="text/javascript">
//document.write(window.screen.width+"*"+window.screen.height);
    if (window.screen.width<=480){
    top.location='WAP网址';
    }
</script>



另外发现,UC解析彩版页面效果很差,图片全部被渲染过的,看来只能定制纯文字版的WAP页了。





在百度搜索完整的如何判断网站客户端是手机还是电脑?内容,或者用Google搜索相关的更多内容

By [cnbruce] at 12:10:17 | 评论 [2] | 浏览 [28317] | TrackBack| 返回顶部

About Comments
这个确实蛮复杂的
By [p555.com] at 2011-11-2 12:34:42


Post a Comment
呢称: 验证码: 
禁止笑脸转换 禁止UBB | 缩放输入框:6 5 | [Ctrl+Enter提交](1000个字符限制)