对当前判断当前是手机访问还是电脑访问进行分析

网络技术 1633 0 2013-11-14

对当前判断当前是手机访问还是电脑访问进行分析
网上现在有三种观点, 一种是基于浏览器发送的 User-Agent, 但明显这种方法是行不通的, 虽然有人列出了大多数的手机发送的User-Agent, 但依然会有很多手机无法识别, 甚至有些手机浏览器不发送User-Agent, 而且也不能保证以后就不会出新牌子.

下面是一个php的例子, 看过之后你就会知道有多么不可靠.

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


另外一种是判断HTTP_ACCEPT, 这种应该相对可靠一点, 不过HTTP_ACCEPT是非常复杂的, 如果一般的不支持html的浏览器还好说, 你只要判断浏览器支持wml并且不支持html就可以, 但如果浏览器同时支持wml和html那就难办了, 低端手机可能会将wml放到html的前面, 但是很多高端手机或者智能手机对html的支持很好, 所以html也会出现在wml前面.

这是黑莓手机发送的HTTP_ACCEPT

application/vnd.rim.html,
text/html,
application/vnd.wap.xhtml+xml,
text/vnd.sun.j2me.app-descriptor,
image/vnd.rim.png,image/jpeg,
application/x-vnd.rim.pme.b,
application/vnd.rim.ucs,
image/gif;anim=1,
application/vnd.rim.jscriptc;v=0-8-8,
application/x-javascript,
application/vnd.rim.css;v=1,
text/css;media=handheld,
application/vnd.wap.wmlc;q=0.9,
application/vnd.wap.wmlscriptc;q=0.7,
text/vnd.wap.wml;q=0.7,
*/*;q=0.5

夸张吧? 不过的确是很标准的, 开发人员可以根据这个得到很多信息, 但很多手机都没这么标准的, 如果你查看IE或者FF的HTTP_ACCEPT你会发现它很短.

text/html,
application/xhtml+xml,
application/xml;q=0.9,
*/*;q=0.8

同样, 给你个php的例子.

if (isset($_SERVER['HTTP_ACCEPT']) &&
    (strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')!==FALSE)
    && (strpos($_SERVER['HTTP_ACCEPT'],'text/html')===FALSE ||
    (strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml') <
        strpos($_SERVER['HTTP_ACCEPT'],'text/html'))
    )) {//手机访问
    readfile('index.wml');
} else readfile('index.htm');

原理:如果浏览器支持WML、而且[不支持HTML]或[WML优先于HTML],则判定为手机。但实际上这个原理是不正确的.

还有一种是说判断网关或者IP什么的, 但我个人认为这个很不可靠, 手机的联网方式很多, 比如我开发的时候就是用模拟器的.这个应该不用什么例子了, REMOTE_ADDR 就足够了.

我从网上找到这些,不知道还有方法吗/ 

上一篇:手机Web App是未来的发展方向

下一篇:服务器与虚拟主机、空间的区别

讨论数量:0

请先登录再发表讨论。 2024-04-25

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链