PHP判断手机(cellphone,mobile,wap)访问函数

前一段时间发布了一个判断搜索引擎Robot的函数 is_robot() ,而最近又发布了一个Go2Wap插件,用于手机访客访问WP时自动转跳到 /wap/ 页面,这个插件发布后,有朋友就向我报告一些Bug,这里结合我遇到的问题综合讲解一下。

先看一下这个判断函数:

  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')){//如果在访问的URL中已经找到 wap字样,表明已经在访问WAP页面,无需跳转,下一版本增加 feed访问时也不跳转
  5.         return true;
  6.     }else{
  7.         return false;
  8.     }
  9. }

这个函数跟上次发布的is_robot()函数基本类似,$uachar里面的是各种手机常见的USER_AGENT:

  • nokia 诺基亚
  • sony,ericsson 索尼爱立信,爱立信
  • mot 摩托罗拉
  • samsung,sgh 三星
  • lg LG
  • sie 西门子
  • philips 飞利浦
  • panasonic 松下
  • alcatel 阿尔卡特
  • lenovo 联想
  • cldc,midp,wap,mobile 这主要针对国内一些MTK平台及早期的手机,这些手机支持CLDC和MIDP,WAP1.1/WAP2.0标准等,故可以认定为手机访客

由于我的水平有限,还没有搞定一些Windows Mobile及其他一些智能手机的USER_AGENT,但国内的主流还是诺基亚,索爱,摩托,三星等,个人觉得上面的这些关键字已经能判断 95%以上的手机了。

您肯定会对$ua == ”产生疑问,为什么USER_AGENT为空也算手机访问?这也是符合咱们特殊国情的,而且,整个插件起作用的也许恰恰就是这一句。当手机用户通过移动梦网访问网站时,中国移动出于某些经济利益的因素,会自动过滤掉访问非SP网站的USER_AGENT,也就是手机用户访问移动梦网首页,收费铃声下载等网页时会提交USER_AGENT,而访问其他网站时,USER_AGENT却是空的。不信您使用Firefox,装上User Agent Switcher,调一个空的USER_AGENT访问 www.google.cn 试试,同样也是转跳到Google的WAP页面,至于联通,我没试过,不过有网友反应也是同样的状况。

另有朋友反应”firefox下用的好好的,可是用IE浏览就自动跳的wap里面了,有人用遨游浏览时也告诉我会自动跳转“,由于他也没有贴出具体的USER_AGENT,我恳请所有遇到BUG的先向我报告一下您的USER_AGENT,如何报告?您只需做一个简单的动作:访问 http://photozero.net/ua.php 我会在数据库记录您的USER_AGENT(仅记录USER_AGENT,不记录其他IP之类的信息,隐私权我负)

在综合分析大家的数据后,我会做出改进,也恳请大家提出意见建议,谢谢。
*ps 本站所有原创、改编的PHP、JS等代码,您均可以自由使用于其他Wordpress插件,或其他任何PHP程序,转换成ASP,JSP也可以,请保留出处,谢谢!

此条目发表在 PHP 分类目录,贴了 , 标签。将固定链接加入收藏夹。

PHP判断手机(cellphone,mobile,wap)访问函数》有 8 条评论

  1. jogocun 说:

    页面错位啦~

  2. 哈哈~有人和我说过这个问题~
    这个插件我还没研究过~~

  3. Yacca 说:

    黑莓的呢…

  4. Romoo 说:

    现在上不去网,只能用手机回复,能告诉我你的邮箱吗?我写了个例子你看怎么样。

    直接给我回邮件吧。

  5. bolo 说:

    这个方法不太好,不够灵活