如何判断是手机或电脑访问web

时间:2014-04-27 22:34:30   收藏:0   阅读:515

mamicode.com,码迷移动设备越来越主流,有很多网站对手机访问并不是特别的友好。所以我们要另外的给手机客户分配针对手机web访问的界面。如何判断是手机还是电脑在访问呢?

首先手机访问时,会附带发送user-agent信息,这个信息里面会有手机号码信息。我们如果可以获取。。。算了,用脚趾头也会想到,这是属于用户个人隐私信息的,移动和联通公司肯定给屏蔽或加密了。除非你服务器IP是在他们的白名单上。

那么我们换其他方式,当手机通过代理服务器访问的时候,http头信息会毫无疑问的包含一个信息:via。这个信息提供了有价值的判断信息。

比如:

河南移动取得的via信息是:
http/1.1 hazz-b-gw001-wap(infox-wisg, huawei technologies)
河南联通的via信息是:
zxwap gateway,zte technologies

这样我们获取http的via信息字符串看是否包含wap字符,如果有则是通过手机访问。这样就十分准确了,但是也会屏蔽掉那些用手机模拟器的用户,(就是用支持wap的浏览器)。。。

先看代码《=====

check_wap() {   
    return stristr($_SERVER[‘HTTP_VIA‘],"wap") ? true : false;  
}  
当然上面那个方法太精准了,我们也想让那些用手机模拟器的客户也可以访问的话,就要再想个办法了。

下面是我网上查的一个办法,通过判断浏览器代理标识符,判断是否是支持WAP的浏览器来决定访问页面。这有一个缺点就是不可能全部的列出所有手机的浏览器标识符与所支持的浏览器标识符。额好吧。。。

先看下代码《====

<?php  
function check_wap() {  
    if (isset($_SERVER[‘HTTP_VIA‘])) return true;  
    if (isset($_SERVER[‘HTTP_X_NOKIA_CONNECTION_MODE‘])) return true;  
    if (isset($_SERVER[‘HTTP_X_UP_CALLING_LINE_ID‘])) return true;  
    if (strpos(strtoupper($_SERVER[‘HTTP_ACCEPT‘]),"VND.WAP.WML") > 0) {  
        // Check whether the browser/gateway says it accepts WML.  
        $br = "WML";  
    //上面返回true 都是wap 访问
    } else {  
        $browser = isset($_SERVER[‘HTTP_USER_AGENT‘]) ? trim($_SERVER[‘HTTP_USER_AGENT‘]) : ‘‘;  
        if(empty($browser)) return true;  
        $browser=substr($browser,0,4);  
        if ($browser=="Noki" || // Nokia phones and emulators  
            $browser=="Eric" || // Ericsson WAP phones and emulators  
            $browser=="WapI" || // Ericsson WapIDE 2.0  
            $browser=="MC21" || // Ericsson MC218  
            $browser=="AUR" || // Ericsson R320  
            $browser=="R380" || // Ericsson R380  
            $browser=="UP.B" || // UP.Browser  
            $browser=="WinW" || // WinWAP browser  
            $browser=="UPG1" || // UP.SDK 4.0  
            $browser=="upsi" || // another kind of UP.Browser ??  
            $browser=="QWAP" || // unknown QWAPPER browser  
            $browser=="Jigs" || // unknown JigSaw browser  
            $browser=="Java" || // unknown Java based browser  
            $browser=="Alca" || // unknown Alcatel-BE3 browser (UP based?)  
            $browser=="MITS" || // unknown Mitsubishi browser  
            $browser=="MOT-" || // unknown browser (UP based?)  
            $browser=="My S" ||// unknown Ericsson devkit browser ?  
            $browser=="WAPJ" || // Virtual WAPJAG www.wapjag.de  
            $browser=="fetc" || // fetchpage.cgi Perl script from www.wapcab.de  
            $browser=="ALAV" || // yet another unknown UP based browser ?  
            $browser=="Wapa" || // another unknown browser (Web based "Wapalyzer"?)  
            $browser=="Oper") // Opera  
        {  
            $br = "WML";  
        } else {  
            $br = "HTML";  
        }  
    }  
    if($br == "WML") {  
        return TRUE;  
    } else {  
        return FALSE;  
    }  
}  
if(!check_wap()) {  
    Header("Location: http://youUrl");  
    exit();  
}  
当然我们的目的是给那些用非电脑访问的客户返回那些适合他们的 十分友好的界面。

那么我认为一个好的办法就是用PHP去判断访问web 的浏览器的详细信息,浏览器尺寸大小,版本、内核、等等,来因材施教的返回web界面。


评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!