如何判断是从电脑和手机访问
就像3G门户和QQ那样你输入3g.cn,如果是从电脑访问,他就跳转到电脑的网页如果是用移动设备访问,就跳到wap的网页有谁知道这个要怎弄?...
就像3G门户和QQ那样
你输入3g.cn,如果是从电脑访问,他就跳转到电脑的网页
如果是用移动设备访问,就跳到wap的网页
有谁知道这个要怎弄? 展开
你输入3g.cn,如果是从电脑访问,他就跳转到电脑的网页
如果是用移动设备访问,就跳到wap的网页
有谁知道这个要怎弄? 展开
8个回答
展开全部
正巧我也在解决这个问题, 和你分享一下我的发现.
网上现在有三种观点, 一种是基于浏览器发送的 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 就足够了.
以上是我今天上午的工作成果, 但实际上还是没有找到完美的解决方案, 先写这么多, 有问题请补充或者发送消息给我, 如果你有更好的办法希望可以分享给我, 谢谢.
补充: 刚刚吃饭的时候想如果浏览器支持js判断屏幕尺寸也是个不错的方法. 还有, 楼主可能是个站长吧, 不知道懂不懂开发技术, 我是做php开发的, 如果需要帮助可以联系我.
网上现在有三种观点, 一种是基于浏览器发送的 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 就足够了.
以上是我今天上午的工作成果, 但实际上还是没有找到完美的解决方案, 先写这么多, 有问题请补充或者发送消息给我, 如果你有更好的办法希望可以分享给我, 谢谢.
补充: 刚刚吃饭的时候想如果浏览器支持js判断屏幕尺寸也是个不错的方法. 还有, 楼主可能是个站长吧, 不知道懂不懂开发技术, 我是做php开发的, 如果需要帮助可以联系我.
展开全部
当用户发出访问请求时,也会将设备信息一并发出,所以你要在用户发出信息你接受后进行判断,是手机就让他访问手机网页地址,是电脑就访问电脑网页地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
IP地址检测麻烦点,检测浏览器是比较合适的,可以用JS或者ASP、JSP、PHP等脚本语言实现。
JS可以检测navigator.userAgent识别客户端
我用手机登录的是:Nokia6708/2.0 (V1.0.0) SymbianOS/7.0 UIQ/2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0
我用PC浏览器登录的是:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
用EXCEL导入我网页数据的是:Microsoft Data Access Internet Publishing Provider Protocol Discovery
你可以试试看下面的脚本:
<script type=text/javascript>
document.write('你的浏览器标识:',navigator.userAgent,'<br>');
if (navigator.userAgent.match(/^Mozilla/)) document.write('电脑浏览器');
else document.write('其它客户端');
</script>
因为所有浏览器都要仿真Mozilla。
JS可以检测navigator.userAgent识别客户端
我用手机登录的是:Nokia6708/2.0 (V1.0.0) SymbianOS/7.0 UIQ/2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0
我用PC浏览器登录的是:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
用EXCEL导入我网页数据的是:Microsoft Data Access Internet Publishing Provider Protocol Discovery
你可以试试看下面的脚本:
<script type=text/javascript>
document.write('你的浏览器标识:',navigator.userAgent,'<br>');
if (navigator.userAgent.match(/^Mozilla/)) document.write('电脑浏览器');
else document.write('其它客户端');
</script>
因为所有浏览器都要仿真Mozilla。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你的手机有开通上网的话,你可以在手机上输入wap.3g.net.cn就可以登入手机页面的3G门户,如果是在电脑上你输入www.3g.net.cn就登入电脑页面!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
判断浏览器的类型。WAP浏览器就是手机。
另外,从IP地址可能也能判断吧,这个只是猜测。
另外,从IP地址可能也能判断吧,这个只是猜测。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询