自动识别WEB和WAP访客的源码

所属分类: 软件教程 / 编程开发 阅读数: 2008
收藏 0 赞 0 分享
既然要利用已经存在的为HTML浏览器编写的代码,就需要知道请求是从HTML浏览器还是从WML浏览器过来的。同样地,如果想重新引导的HTML浏览器直接到相应的HTML文档上,WML浏览器到WML页面上,以下的PHP代码就可以做到这些。
<?
// Because this script sends out HTTP header information,
// the first characters in the file must be the <? PHP tag.
// relative URL to your HTML file
   $htmlredirect = "/html/my_htmlpage.html";
// ABSOLUTE URL to your WML file 
   $wmlredirect = "http://wap.mysite.com/wml/my_wmldeck.wml";
   if(strpos(strtoupper($HTTP_ACCEPT),"VND.WAP.WML") > 0)
{// Check whether the browser/gateway says it accepts WML.
     $br = "WML";
   }
   else {
     $browser=substr(trim($HTTP_USER_AGENT),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"?)
        {
        $br = "WML";
     }
     else {
       $br = "HTML";
     }
   }
   if($br == "WML") {
// Force the browser to load the WML file instead
    header("302 Moved Temporarily");
    header("Location: ".$wmlredirect);
    exit;
   }
   else {
// Force the browser to load the HTML file instead
    header("302 Moved Temporarily");
    header("Location: ".$htmlredirect);
    exit;
   }
  ?> 
  这个判断是在服务端完成的, PHP代码将首先查看网关是否接收text/vnd.wap.vml MIME类型。如果不是,将检测前面的字符,查看是否为WML浏览器。如果不符合,那么就假设为HTML浏览器。如果有新的WML浏览器,那么ID字符串也要增加。
  这个代码基于Robert Whitinger(robert@wapsight.com)的代码,使用了Don Amaro(donamaro.concepcion@nl.unisys.com)提供的列表。
  注意:由于只需要四个字符串就可以辨别,因此例如:"WapIDE-SDK/2.0;(R320s(Arial))" 可以使用“WapI”来代替是可行的做法,也是足够的。
  同样的功能也可以通过ASP来解决。先判断请求的是“/index.wml” 或者 “/index.html” 和所需要的MIME类型。另外以下的脚本辨别的方式和上面不一样。另外还需要网关告诉服务器它能接收的text/vnd.wap.wml MIME类型。该例子如下所示:
<%
Response.Buffer = TRUE
  Dim IsWap
  httpAccept = LCase(Request.ServerVariables("HTTP_ACCEPT"))
  if Instr(httpAccept,"wap") then
  IsWap=1
  Else Response.Redirect "/index.html" : Response.Flush : Response.End
End if
%>
<%Response.ContentType = "text/vnd.wap.wml"%><?xml version="1.0"?>
<%Response.Flush%>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
  <wml>
  <card id="redirect">
  <onevent type="onenterforward">
  <go href="/index.wml"/>
  </onevent>
  <p>
  <a href="/index.wml">enter</a>
  </p>
  </card>
  </wml>
  <%Response.Flush:Response.End%>
更多精彩内容其他人还在看

parse_url函数解析

  描述  array parse_url ( string url )      此函数返回一个关联数组,包含现有 URL 的各种组成部分。如果缺少了其中的某一个,则不会为这个组成部分创建数组项。组成部分为:      scheme - ...
收藏 0 赞 0 分享

visualstudio2019怎么连接并使用VSTS?

visualstudio2019怎么连接并使用VSTS?visual studio 2019使用的时候,想要连接visual studio team service,该怎么操作呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

vscode怎么规范代码? vscode代码格式化的教程

vscode怎么规范代码?vscode编程开发的时候,发现代码很轮,想要自动格式化代码,该怎么操作呢?下面我们就来看看vscode代码格式化的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

Sublime Text英文字母大小写怎么切换?

Sublime Text英文字母大小写怎么切换?Sublime Text中编程开发的时候,想要切换英文大小写,该怎么切换呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

CodeBlocks(vc开发工具)的入门使用教程

今天起我们将加大对其他编译器学习的支持,对于训练场中的题目,我们极力建议大家以CodeBlocks作为编程工具,因为VC6的种种问题及与训练场判题系统标准的不符,导致不少新同学被坑不少
收藏 0 赞 0 分享

Sublime代码编辑器怎么重新打开编码?

Sublime代码编辑器怎么重新打开编码?Sublime代码编辑器之前变价的编码想要打开,该怎么打开呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

vb怎么将年表分成四份季度表?

vb怎么将年表分成四份季度表?visual basic中的一个表想要分成多分表,该怎么实现呢?我们可以使用代码实现,下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

VB怎么编写给表格快速添加批注的代码?

VB怎么编写给表格快速添加批注的代码?想要给表格中的数据添加批注,我们可以使用vb代码来实现,下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

UltraEdit怎么修改选中文本的颜色?

UltraEdit怎么修改选中文本的颜色?UltraEdit编程开发的时候,想要修改文本的颜色,该怎么修改选中文本的颜色呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

ueditor编辑器怎么修改复制粘贴文档源代码的字体?

ueditor编辑器怎么修改复制粘贴文档源代码的字体?ueditor复制来的代码想要编辑一下,该怎么设置代码字体大小呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多