主页 » 建站笔记 » 正文

几段好用的判断手机平板等移动设备的php代码

 bandian2015/11/05 20:35 5,333 ℃ 2条点评
小号字体中号字体大号字体
今天在解决网站手机端版式的时候犯了大难,本来主题有设置手机版式的功能,但我发现在开启这个功能之后只在手机自带浏览器里面生效,其他诸如UC、搜狗、chrom...

今天在解决网站手机端版式的时候犯了大难,本来主题有设置手机版式的功能,但我发现在开启这个功能之后只在手机自带浏览器里面生效,其他诸如UC、搜狗、chrome等并没有显示设置的手机版式。而主题作者清枫这个家伙又神龙见首不见尾,联都联系不上,所以只能靠自己研究代码了。

查看了functions.php里面的函数,发现ismobile()函数中包括了一堆浏览器UA以及各种手机型号的信息,本来对这些就不是太懂,大概意思只能靠猜,因为想到在自带浏览器里面显示是正常的,所以就错以为是浏览器UA不全,于是百度谷歌各种浏览器的UA加到代码中,然后又找各种判断移动设备的代码,然而折腾了半天几款浏览器始终雷打不动的显示电脑页面,这时我才意识到我可能搞错了,问题本身可能与判断代码没有半毛钱的关系。

但是问题出在哪我依然百愁莫展,就在这时无意中瞟到插件栏我才幡然醒悟:尼玛啊!我开了缓存插件的!一瞬间我是打脸拍大腿上下其手啊!我会告诉你我那一下把大腿都拍肿了么。。。

虽然浪费了好多时间,但这其中也并不是一无所获。至少找到好几段很有用的代码,以后再碰到相关问题应该就可以迎刃而解了。
下面是代码部分:

wordpress自带函数:wp_is_mobile();

可以很简单的做一个判断:

if(wp_is_mobile()){
//用于手机端的代码
}else{
//用于桌面端的代码
}

我用自己的手机测试之后发现还是很好用的,不过只有一个手机,没有办法测试更多,有可能有些设备会识别不了.

这里再次鄙视那些只知道复制而从来不测试代码的,百度到的好几篇文章都有把函数错误拼写成wp_is_moblile的,一看就知道抄错了的。。。

通过判断浏览器的UA(useragent)

包括手机系统和品牌以及窗口大小:

function is_mobile() {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$mobile_browser = Array(
"mqqbrowser", //手机QQ浏览器
"opera mobi", //手机opera
"juc","iuc",//uc浏览器
"fennec","ios","applewebKit/420","applewebkit/525","applewebkit/532","ipad","iphone","ipaq","ipod",
"iemobile", "windows ce",//windows phone
"240x320","480x640","acer","android","anywhereyougo.com","asus","audio","blackberry","blazer","coolpad" ,"dopod", "etouch", "hitachi","htc","huawei", "jbrowser", "lenovo","lg","lg-","lge-","lge", "mobi","moto","nokia","phone","samsung","sony","symbian","tablet","tianyu","wap","xda","xde","zte"
);
$is_mobile = false;
foreach ($mobile_browser as $device) {
if (stristr($user_agent, $device)) {
$is_mobile = true;
break;
}
}
return $is_mobile;
}

使用的时候if判断就行:
< ?php if (is_mobile() ): ?>
 //怎样怎样..(这里可以添加一个mobile.css,如<link rel="stylesheet" type="text/css" media="all" href="<?php echo get_template_directory_uri(); ?/>/mobile.css" />)
< ?php endif ;?>

自适应主题应该在头部添加以下meta信息:
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1"/>

浏览器的UA(useragent)+HTTP协议的判断方法


function ismobile(){
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) return true;
if (isset ($_SERVER['HTTP_VIA'])) return stristr($_SERVER['HTTP_VIA'], "wap")? true : false;
//判断手机发送的客户端标志
if (isset ($_SERVER['HTTP_USER_AGENT'])){
$clientkeywords = array ('ericsson','mot','sgh','sharp','sie-','philips','panasonic','alcatel','meizu','netfront','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','mobile','mqqbrowser','opera mobi','juc','iuc','fennec','ios','applewebKit\/420','applewebkit\/525','applewebkit\/532','ipad','iphone','ipaq','ipod','iemobile', 'windows ce','240x320','480x640','acer','android','anywhereyougo.com','asus','audio','blackberry','blazer','coolpad' ,'dopod', 'etouch', 'hitachi','htc','huawei', 'jbrowser', 'lenovo','lg','lg-','lge-','lge', 'mobi','moto','nokia','phone','samsung','sony','symbian','tablet','tianyu','wap','xda','xde','zte');
//从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))
{
return true;
}
}
//协议法,因为有可能不准确,放到最后判断
if (isset ($_SERVER['HTTP_ACCEPT'])){
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((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')))) { return true; } } return false; } [/code] 上面这一段代码也是现用主题里面的代码,不过贴出来的是经过我整合之后的代码,我也不知道这是不是多此一举. 因为我发现在上面那一段纯UA判断的代码中的有些浏览器UA是下面这段里面没有的,于是将一些比如QQ浏览器和opera还有WP和一些浏览器窗口大小的关键字都加进来了,也不知道效果会不会更好一些. 值得提一下的是,在我添加类似"applewebKit/420"带有斜杠的关键字之后出现过一次报错,内容如下: Warning: preg_match() [function.preg-match]: Unknown modifier "x" in functions.php on line xx 原因是正则表达式将关键词里面的斜杠当成定界符了,在斜杠之前加一个转义字符"\"后问题解决. 还有一个大招mobile_detect因为篇幅的原因我决定记在另一篇文章里面,在这里

上一篇:Windows10正式版微软官方MSDN原版系统下载
下一篇:移动端网站建设必备:判断移动设备的php类mobile_detect.php
版权信息
本文遵循 BY-NC-SA 共享方式,永久链接:https://www.augsky.com/?p=746
转载请注明转自 » 格部落格 » 几段好用的判断手机平板等移动设备的php代码

已有2条评论,欢迎点评!

  1. avatar#1jis

    很不错,学习学习

    2014-12-25 pm8:06回复
    • avatarbandian @ jis

      mobile_detect功能更强大,不过没有这两段轻巧了

      2014-12-25 pm9:31回复