很多时候也可以通过逻辑程序来进行判断,如PHP、JS是常用的两种识别访问设备类型的常用方法。

原理都是采用识别访问客户端的HTTP_USER_AGENT,然后进行关键字匹配进行确定设备类型,对于伪造HTTP头的就区分不出来了。

区分设备类型然后要做的就是能够针对不同设置显示出易于阅读的网页,具体可以研究响应式布局技术。

本文主要介绍如何通过php或js来识别终端类型。

<?php
class IsMobile {
public static function isMobile()
{
$useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$useragent_commentsblock=preg_match('|\(.*?\)|',$useragent,$matches)>0?$matches[0]:''; $mobile_os_list = array('Google Wireless Transcoder','Windows CE','WindowsCE','Symbian','Android','armv6l','armv5','Mobile','CentOS','mowser','AvantGo','Opera Mobi','J2ME/MIDP','Smartphone','Go.Web','Palm','iPAQ');
$mobile_token_list = array('Profile/MIDP','Configuration/CLDC-','160×160','176×220','240×240','240×320','320×240','UP.Browser','UP.Link','SymbianOS','PalmOS','PocketPC','SonyEricsson','Nokia','BlackBerry','Vodafone','BenQ','Novarra-Vision','Iris','NetFront','HTC_','Xda_','SAMSUNG-SGH','Wapaka','DoCoMo','iPhone','iPod'); $found_mobile = self::CheckSubstrs($mobile_os_list, $useragent_commentsblock) ||
self::CheckSubstrs($mobile_token_list,$useragent); if ($found_mobile){
return true;
}else{
return false;
}
} public static function CheckSubstrs($substrs,$text)
{
foreach($substrs as $substr)
if(false!==strpos($text,$substr)){
return true;
}
return false;
}
} /*test code
if (IsMobile::isMobile())
echo '手机登录www.nginx.cn';
else
echo '电脑登录www.nginx.cn';
*/
?>
function isPhone() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
return true;
}
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset($_SERVER['HTTP_VIA'])) {
//找不到为flase,否则为true
if(stristr($_SERVER['HTTP_VIA'], "wap"))
{
return true;
}
}
//脑残法,判断手机发送的客户端标志,兼容性有待提高
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array (
'nokia',
'sony',
'ericsson',
'mot',
'samsung',
'htc',
'sgh',
'lg',
'sharp',
'sie-',
'philips',
'panasonic',
'alcatel',
'lenovo',
'iphone',
'ipod',
'blackberry',
'meizu',
'android',
'netfront',
'symbian',
'ucweb',
'windowsce',
'palm',
'operamini',
'operamobi',
'openwave',
'nexusone',
'cldc',
'midp',
'wap',
'mobile',
'phone',
);
// 从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;
}
js区分手机或PC访问源码 方法一 <!--切换手机版网站--->
<script src="http://siteapp.baidu.com/static/webappservice/uaredirect.js" type="text/javascript"></script>
<script type="text/javascript">uaredirect("http://www.nginx.cn/");</script>
方法二 <script type="text/javascript">
<!-- //平台、设备和操作系统
var system ={
win : false,
mac : false,
xll : false
};
//检测平台
var p = navigator.platform;
system.win = p.indexOf("Win") == 0;
system.mac = p.indexOf("Mac") == 0;
system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);
//跳转语句,如果是手机访问就自动跳转到wap.baidu.com页面
if(system.win||system.mac||system.xll){
window.location.href="http://www.kdw.cc";
}else{
window.location.href="http://m.kdw.cc";
}
-->
</script>

最新文章

  1. 最全的jQuery知识汇总
  2. C语言中do...while(0)的妙用
  3. 旧版API的TextInputFormat源码分析
  4. 重命名nginx服务器
  5. Win7远程登录Ubuntu14.04
  6. Android获取SD卡中选中图片的路径(URL)
  7. 【.Net Framework 体积大?】不安装.net framework 也能运行!?原理补充-3
  8. 常用Java API(转)
  9. windows 下安装和运行 hadoop
  10. 干货满满,腾讯云+社区技术沙龙 Kafka Meetup 深圳站圆满结束
  11. Spotlight--你不得不用的Mac查询利器
  12. 项目遇到的小问题(关于vue-cli中js点击事件不起作用和iconfont图片下载页面css样式乱的解答)
  13. tomcat设置开机自动启动
  14. .NET Entity Framework基本使用方法
  15. C#跨窗体传值的几种方法分析(很详细)
  16. ThreadPoolExecutor执行过程分析
  17. Geodetic集合
  18. 题解 P1781 【宇宙总统】
  19. 字符集导致乱码问题,gi安装问题
  20. MySQL安装部署及调优

热门文章

  1. Java架构师之路 Spring学习笔记(一) Spring介绍
  2. 如何让Adobe reader 记住上次pdf文档打开位置?
  3. sqlserver 调试WINDBG ---troubleshootingsql.com
  4. Oracle里面的用户user无法登录 LOCKED(TIMED)
  5. [转载]DIY树莓派之随身工具箱
  6. python合并多个csv文件并去重
  7. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-A ( ZOJ 3819 ) Average Score
  8. bootstrap popover 如何在hover状态移动到弹出上不消失
  9. 让C#可以像Javascript一样操作Json DynamicJson
  10. Java代码Bug分析插件 FindBugs