### php 生成 WAP 页面

WAP（无线通讯协议）是在数字移动电话、个人手持设备（PDA 等）及计算机之间进行通讯的开放性全球标准。由于静态的 WAP 页面在很多方面不能满足用户个性化的服务请求，因此通过 WAP 服务器端语言产生动态的 WML 页面，具有很广泛的应用价值和很高的商业价值。

WAP 应用结构非常类似于 Internet，一个典型的 WAP 应用请求是这样的：首先，具有 WAP 用户代理功能的移动终端(WAP 手机等)通过内部运行的微浏览器(Micro Browser)对某一网站以无线方式发送 WAP 服务请求。该请求先由 WAP 网关截获，对信息内容进行编码压缩，以减少网络数据流量，同时根据需要将 WAP 协议转换成 HTTP 协议，然后将处理后的请求转送到相应 WAP 服务器。在 WAP 服务器端，根据页面扩展名等性质，被请求的页面直接或由服务器端脚本解释后输出，再经网关传回用户。

从上述 WAP 应用流程可以看到，生成动态 WAP 页面与动态产生 Web 网页的过程非常类似。但是由于 WAP 应用使用的 WML 语言来源于语法严格的 XML，因此要求输出的格式必须按 WAP 网页的规范输出。同时，由于 WAP 协议的应用范围、移动客户端的软硬件水平等特殊性，对每次输出的页面的大小、图像的格式及容量都有一定限制。下面我们以 PHP 脚本语言为例，看看如何动态输出 WAP 页面。

一、设置 WEB 服务器

首先你的 Web 服务器要安装好 PHP，即能处理 PHP 脚本程序。其次，为使 Web 服务器能同时识别和处理 PHP、WML、WBMP 等文件，Web 服务器的 MIME 表需添加以下的几种文件类型。

text/vnd.wap.wml .wml
image/vnd.wap.wbmp .wbmp
application/vnd.wap.wmlc .wmlc
text/vnd.wap.wmls.wmls
application/vnd.wap.wmlsc .wmlsc

二、用 PHP 输出简单动态 WAP 页面

下面有一个最简单的 PHP 生成 WAP 页面的例子。注意由于需要 PHP 解释器来解释该程序，并输出 WAP 页面，因此所有类似程序应以.php 为扩展名。

<?php
header(″Content－type: text/vnd.wap.wml″);
echo (″<wml> <card> <p>″);
echo date( ″l dS of F Y h:i:s A″ );
echo (″</p></card></wml>″);
?>

该例子在 WAP 手机模拟器中可以浏览，输出当前日期时间，而在普通的浏览器中无法识别，甚至会被认为是错误下载。这是因为在程序开头就声明了该输出文档为 WML 类型，该类型只有 WAP 设备能够识别并解释。值得注意的是，我们常见的 HTML 语言对规范性要求不严，大多数浏览器能“容忍”其中相当多的编写错误，而 WML 规范相当严格，一点失误都可能导致无法输出所需页面。

一旦我们知道了用 PHP 脚本输出 WAP 页面的标准过程，我们就能够使用 PHP 强大的功能配合以 WML 语言的交互处理以及 WML Script 的简单脚本，开发出适合我们需要的应用系统了。

三、用 PHP 动态生成图像

WAP 应用使用一种特殊黑白的图像格式 WBMP。我们可以用一些工具来将已有图像转换成 WBMP 格式，然后在 WML 文档中使用。但是在 WAP 站点上如果能动态地生成所需图像如 K 线图等，将会有广阔的应用前景。幸运的是，PHP 的 GD 库(版本 1.8 以上)已经提供了相应函数。

<?PHP
Header(″Content－type: image/vnd.wap.wbmp″);
Sim = ImageCreate(50, 50);
Swhite = ImageColorAllocate(Sim,255,255,255);
Sblack = ImageColorAllocate(Sim,0,0,0);
ImageRectangle(Sim, 5, 5, 20, 20, Sblack);
ImageWBMP(Sim); ImageDestroy(Sim);
?>

该文件将在 WAP 模拟器中显示一个黑色矩形框。注意要使用 GD 的图像函数库，必须在 PHP 配置中加载 PHP_GD.DLL 库文件。

四、在 PHP 中处理汉字

WAP 作为一种全球应用，选择了 UNICODE 2.0 作为其标准字符集编码，以便能同时处理包括英文、中文、日文、法文等多种文字。而我们平常处理汉字使用的是 GB2312 编码，不同的内码标准势必不能通用，因此如果不在两种编码之间通过码表进行转换，就会出现汉字乱码现象。现在已经有较成熟的 GB－2312 与 UNICODE 编码转换的程序和函数，并在 ASP、PHP、JSP 等系统中使用，我们可以在一些技术站点上找到它们。

目前的大多数 WAP 手机（Nokia7110、爱立信 R320S 等等）都是使用 UTF－8 编码的，也就是采用 UNICODE 来编码。这样，如果我们直接在 WML 使用中文字符（GB2312 编码），将会产生乱码，手机用户无法识别，所以我们在输出中文之前，要使用程序或函数对中文进行 UNICODE 的编码。而在少数支持 GB2312 编码的手机或 WAP 终端设备中，我们可以在程序中定义好文档的内码类型后即可直接正确显示汉字，例如：

<?php
header(″Content－type: text/vnd.wap.wml; charset=gb2312″);
echo (″<wml><card><p>″);
echo (″中文测试″);
echo (″</p></card></wml>″);
?>