跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

怎么判断当前是手机访问还是电脑访问呢

如何判断当前是手机访问还是电脑访问呢?网上现在有三种观点, 一种是基于浏览器发送的 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 就足够了.

我从网上找到这些,不知道还有方法吗/------解决方案--------------------占地学习。

话说……确定客户端类型之后,下一步会有什么操作?

手机浏览器支持javascript么?

------解决方案--------------------关注------解决方案--------------------不如你直接通过浏览器来判断系统是什么------解决方案--------------------

1. 是否支持js,

2. 浏览器有效区域分辨率

3. 某段js执行花费的时间

4. user-agent

不过无法做到100%正确,这些数据都是可以伪造的------解决方案--------------------学习~~~------解决方案--------------------学习 - -------解决方案--------------------学习 - --------解决方案--------------------学习了。。

------解决方案--------------------让操作的人自己选择好了.这样肯定不容易搞错.

------解决方案--------------------关注中。。。。。。。

相关文章