Home > Backend Development > PHP Tutorial > 怎么判断当前是手机访问还是电脑访问呢

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

WBOY
Release: 2016-06-13 10:06:00
Original
1086 people have browsed it

如何判断当前是手机访问还是电脑访问呢?
网上现在有三种观点, 一种是基于浏览器发送的 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%正确,这些数据都是可以伪造的
------解决方案--------------------
学习~~~
------解决方案--------------------
学习 - -
------解决方案--------------------
学习 - --
------解决方案--------------------
学习了。。
------解决方案--------------------
让操作的人自己选择好了.这样肯定不容易搞错.
------解决方案--------------------
关注中。。。。。。。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template