You are on page 1of 86

WAP 常见问题问答大全(www.airchn.

cn)

WAP 常见问 题问答 大全

目录

一、关于 WAP 的常见问答

二、关于 WML 的常见问答

三、关于 WAP 开发的常见问答

四、关于 WMLScript 的常见问答

五、关于 WBMP 的常见问答

六、关于 WAP 网关的常见问答

七、关于 WAP 浏览器的常见问答

八、关于 WAP 手机的常见问答

九、关于 WAP 安全的常见问答

十、关于 WAP 其他方面问答

十一、关于 WAP 站点建设的常见问答

第 1 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

一、 关于 WAP 的常见 问答

1. 简单的 说 WAP 代表什么?

WAP 代表“Wireless Application Protocol”。WAP 标准也就是无线应用协议(Wireless Application Protocol

)。它的作用就是使移动电话和其他无线设备能够访问各种服务和信息,特别是 Internet 上的服务与信息。

2. 什么是 WAP ?

WAP 是 Wireless Application Protocol 的首字母缩写。其定义来自于无线工业界,例如 Nokia 和 Ericsson。

它基于现有的 Internet 技术,例如 XML 和 IP ,主要是为无线用户( WAP 设备,例如移动电话)提供

Internet 上 的 应 用 和 服 务 。

WAP 不是简单的一个协议,它由许多协议组成的,涵盖了从 WAP 设备到用户代理以及传输协议与

GSM 信道的各个方面。许多站点都有关于 WAP 的信息,具有权威的资料一般来自于 WAP Forum。但是从

WAP Forum 来的信息非常专业,技术性强,因此对于新手来说是很困难的。虽然 WAP 目前还处在刚刚诞

生的婴儿阶段,看起来的确有很多不尽人意的地方,但是随着无线通讯工具的普及、网络技术日益成熟、

生产商和网络服务商的不断进步,WAP 一定会实现现在人们使用 IE 等浏览器上网冲浪一样的快捷、愉悦,

并且更能享受随时随地想上就上的轻松自在。

3. 谁发展 了 WAP ?

WAP 是由一个名叫“WAP 论坛”的公开组织发展的。这个讨论组的主要职责是制定 WAP 的标准和规范。

该讨论组的网址为:www.wapforum.com。

4. WAP 论坛有哪些 公司加盟 ?

几乎所有的大型通讯公司、无线网络设备提供商,手持设备制造商和软件开发商等等都是 WAP 讨论组

的成员。

5. 为什么 要投资 WAP ?

WAP 允许持有支持该协议的移动设备访问信息和事务服务,例如:饭店和旅馆信息、证券交易、银行服

务、目录服务、外汇牌价、航班时刻表、火车和汽车时刻表等等。基于 WAP 的设备是全球化的,易于使用,

并 且 具 有 很 高 的 安 全 级 别 。 它 兼 容 现 有 的 应 用 程 序 和 IT 系 统 。

预测到 2003 年,将通过移动电话连接到 Internet 网络的人将超过使用 PC 机连接的人。策略分析学家认

为 , 将 有 超 过 5.25 亿 部 WAP 手 机 投 放 市 场 。
第 2 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

通过交叉的合作,WAP 提供了许多潜在的重要商机。它将开辟新的服务方式和新的服务渠道。拥有 WAP

合 作 伙 伴 的 公 司 将 能 够 为 他 们 的 客 户 随 时 随 地 提 供 服 务 。

WAP 将允许合作伙伴使用现有的所有协议或载体为用户服务。最重要的就是通过一个统一的途径来访问

全 球 的 用 户 。

面对这样广阔的前景,当然有理由投资 WAP 了。

6. 什么服 务可以利 用移动的 优点?

移动服务当然比经典的 Web 服务更适合于移动的 Internet。这些应用正在合并,正像冰山一点点地融化。

以下的应用是其中的一个例子,这个应用将从移动网络受益非浅(被称作“应用杀手”)。

定 位 服 务 ( Location Based Services )

总的来说定位服务为用户提供全球定位服务,并且还能提供和位置相关的各种信息。在不久的将来,移

动设备将能够告诉 Web 服务器特定的用户在哪儿。当然也可以采取直接向用户询问他们的位置,然而用户

的 回 答 描 述 往 往 是 不 准 确 的 。

一个简单的例子就是显示一个城市的公共交通。假设某人想到某个站下车去参加一个会议。因为公共汽

车可能会误点,他需要知道公共汽车上次离停的时间,或者知道它到底晚点多少。

在公共汽车站点一般都有一个时间表,还有一个唯一的标识。他可以访问公共交通的 Web 站点,输入必

要的信息后,Web 服务器就可以告诉他到底在什么地方,并且可以显示最近的公共汽车站点。虽然现在的

公共汽车、火车等交通工具还没有 GPS,但是相信总有办法得到位置的精确信息。总的来说,系统可以不

用 等 到 新 技 术 的 出 现 就 能 得 到 相 关 的 服 务 。

当技术成熟到可以自动得到用户地理位置的时候,一个好的基于位置的服务将可以提供一个城市停车

服务。例如不需要停车灭表,用户拥有一个设备和唯一的号码。当他想停车的时候,只要简单地告诉系统

他想停在什么地方、停多久。当离停车结束只有 5 分钟的时候,系统将使用 SMS 系统告诉他的停车时间快

到了,他必须开车离开或者再付钱。同时,这个系统还可以自动地通知用户哪里有停车位置,哪里发生了

交通堵塞并提出智能化的建议。

7. 在中国 能得到 WAP 手机吗 ?

能 。 现 在 有 很 多 厂 家 都 生 产 WAP 手 机 并 且 在 中 国 销 售 。 例 如 :

Ericsson,Mitsubishi,Neopoint,Samsung,Ericsson。

8. WAP 可以在 GPRS 上运行 吗 ?

可以。GPRS 是一种新的无线服务方式。它将使 WAP 的传输比在现在的 SMS 或者 CSD 要快。

9. 在 GSM 中 WAP 使用什么信 道?


第 3 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

在 GSM 中,WAP 可以使用 Short Message Service(SMS)信道或者 Circuit Switched Data (CSD)信道,

后者的带宽比较大。

10. WAP 可以在 什么样类 型的网络 上运行?

WAP 是为了可以在多种网络环境中运行而设计的。包括:GSM、PDC、CDPD、CDMA、TDMA、PHS 和

DECT,还包括将来的 3G。

11. WAP 设备是 如何连接 到 Internet 上的?

一个普通的 WAP 应用的场景如图 10-1 所示:

图 10-1 普通的 WAP 应用

在上图中,从左边开始,移动网络( GSM、CDDA 等)中的移动 WAP 设备,通过拨号连接到接入服务

器(RAS,或者远程控制服务器)的 Modem 上。这个服务器使得 WAP 设备可以使用协议来工作。有一些

如同 Internet Service Provider 将提供给用户底层协议,被称作为 PPP(Point-to-Point)协议。这个协议是用

在整个 WAP 链中的下一个环节设备——由移动营运商提供的 WAP 网关。网关连接无线和“Web”世界,基

本 上 是 使 得 WAP 设 备 能 够 操 作 普 通 的 Internet 。

更详细地说,当用户在 WAP 设备上输入 URL 的时候,例如 http://wap.colorline.no/ WAP 设备首先检查

用户的连接设备是否已经打开。如果没有就拨号到如上面所描述的 PPP 提供者。在 PPP 提供者已经给 WAP

所需要的协议和指定的 IP 地址之后,请求的 URL 将发送给网关(WAP 网关)。在 WAP 设备请求的 URL

的“控制”下,发出一个普通的 HTTP 请求(例如:GET http://wap.colorline.no)给 Internet 。在 Internet 那

边有一个普通的 Web 服务器,里面装有 WAP 和 Web 的内容,现在接收到了从 WAP 网关过来的 HTTP 请

求。这个 Web 服务器通过判断浏览器的类型(WAP 或者 Web)来发送相应的内容给浏览器。接着请求的内

容发送到 WAP 设备。因为一个 WAP 设备的 WML 浏览器只能读懂二进制的 WML,所以如果这些请求的

内容是文本的 WML 编码,WAP 网关就进行编译工作,将 WML 编译成二进制的 WML,也就是设备可以

读懂的 WMLC(一些经过压缩的二进制代码),并把这些二进制代码发送到 WAP 设备;如果内容已经是

第 4 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

二进制的 WML 格式,WAP 网关将跳过这个操作。这就是为什么转换文本 WML 到二进制 WML 减小了带

宽的缘故。最后,当 WAP 设备的 WML 浏览器接收到二进制的 WML 代码,浏览器就显示其内容在 WAP

设 备 上 供 用 户 使 用 。

这 是 一 种 WAP 设 备 连 接 到 Internet 的 主 要 方 式 。

当 WAP 设备使用的是公共的 WAP 网关,而不是移动营运商提供的网关的时候,只需要简单地将 WAP

网关移动到 Internet 上。需要说明的是这不是普通的 WAP 设备的配置。在放置的时候,可能要遇到一些问

题,图 10-2 说明了这个方式:

图 10-2 使用公共网关

这个时候 WAP 设备请求了另外的一个在 Internet 上的 WAP 网关。这个图没有什么特别的地方需要说明。

只是当那些没有移动营运商提供 WAP 服务的地方,或者是想自己建立 WAP 服务的地方,可以使用这样

的 方 法 。

如果内容提供者想完全控制在 Web Server 和 WAP 设备之间的数据流发送和接收。那么就应该安装一个

所谓的 WAP server。这个设备其实是一个 Web Server 和 WAP 网关的混合体。并且经常是在一个防火墙的后

面 。

图 10-3 说明了这个问题。防火墙是可选的,但是强力推荐。

图 10-3 加入防火墙

第 5 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

WAP 设备就像前面所说的那样进入 Internet,但是现在连接到防火墙的时候,它将接受或者拒绝一些连

接,然后将连接发送给 WAP 服务器内的 WAP 网关。在这个图中,在内容服务器和 WAP 设备之间是使用

点 对 点 的 WTLS 加 密 协 议 。

WAP 服务器对于一个普通的站点来说是不必要的。

12. 能从服务器 推送消息 到 WAP 设备吗?

WAP1.1 不允许推送。可以用 SMS 来达到这个目的。

13. WAP 如何同 Bluetooth, EPOC 和 Windows CE 竞争 ?

这有点不大可能。WAP 是使得 Web 的内容迁移到移动设备上。EPOC 和 Windows CE 是设备的操作系统,

它将使得微型浏览器可以浏览 WML 页面。Bluetooth 是一个 RF (Radio Frequency)技术,它是一种小范

围的无线网络。

14. WAP 能持续 多久?

笔者个人的观点来看,WAP 能持续多久,最终还是要取决于用户对 WAP 的信心。一个好的技术往往在

市场选择了其他的方式之后就被浪费掉了。例如 VHS,Beta 和 Video 2000 家庭视频标准。从技术的角度上

来讲 Video 2000 提供最好的质量,但是市场选择了 VHS,而且是三个里面最差的那个。对于 WAP 的前景

问题,很不幸的是 WAP 现在被标上了“移动电话上的 Internet”这样一个条框限制。相信多数的 WAP 设备

是 移 动 电 话 , 但 是 WAP 并 没 有 电 话 这 个 限 制 , 说 WAP 是 一 个 Web 浏 览 器 是 错 误 的 。

WAP 是可以在一个“瘦”客户端上提供类似于 Internet 上的服务和应用。所谓“瘦”就是低能力的处理

器,非常有限的显示屏幕等等。这些应用如何能更好的工作,完全取决于开发人员。WAP 现在的确是限制

了 开 发 人 员 , 但 它 是 一 个 新 技 术 , 毕 竟 在 发 展 的 过 程 中 有 很 多 障 碍 。

有很多人当他们见到手持的微型 PC 和 PDA 的时候说,因为小的显示屏幕和缺乏好的输入机制 WAP 就

要死亡。笔者个人认为这是错误的,首先是设备的问题,当人们外出时需要尽可能的少带设备;其次是花

费问题,两个设备肯定比一个设备花费多,并且主要的 WAP 设备普通人都能够承受,而且花费也少。

制造厂商可能想通过将 PC 和移动电话集成在一起来解决这个问题。那么设备的尺寸又是另外一个问题。

对于这样一个能够让人们使用的设备,肯定有很多限制。首先是输入设备,当前最好得输入设备就是键盘。

若给移动电话配一个合适的键盘,那么这样一个键盘的每个按键之间的间隔可能只有小孩子才可以使用。

其次是输出界面,一个人的眼睛最适合于观看五英寸的屏幕,任何比这再小的屏幕,用户都不得不再移

近观看,这么大的一个屏幕将使得设备显得特别庞大并且无法放在一个普通的口袋里,而典型的移动电

话的显示屏幕是 2 英寸,如果用户想显示普通的 640*480 图像在这个屏幕上,那将是不太现实的。

一个典型的混合 PDA 和移动电话的设备有点像今天的 Nokia Communicator。用户无法方便地使用这个设

第 6 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

备,除非用一只手来抓住它另一只手来操作或者让它完全固定住。而一个普通的移动电话,用户只需用一

只 手 就 可 以 操 作 , 包 括 抓 住 和 输 入 。

有人可能要说在一个电话上使用数字键盘来输入是不可能。使用普通的键盘的确是很方便,但是这并不

意味着你在 WAP 设备上书写不方便。现在成亿的 SMS 都是从移动电话上发出的,就证明了这一点。

最后要说的是 WAP 不是在移动电话上的 Web。WAP 将拥有很长的生命期,只要有开发者能够理解它并

且应用它。

15. 有哪些成功 的 WAP 应用?

表 10-1 给出了很好的 WAP 应用的实例。也许不是非常有用或者非常高科技,但是它们是很好的例子:

WAP 可 以 提 供 Web 的 功 能 应 用 。

这些应用是基于 WML 的,在普通的 HTML 下将无法得到预期的效果。

表 10-1 WAP 应用

应用 类型 地址

翻译 翻译成英文 http://www.zenith.ie/wap/translate

WAP CAM 在 线 的 http://wap.colorline.no/demos.html

WAP 相机
(从菜单选择 WAP CAM)

域名检测 检 测 http://kronkel.com/domain.wml
.com .net
和 .nl 域 名 的
有效性

登记本演示 登记本演示 http://cgi.cse.unsw.edu.au/cgi-bin/cgiwrap/s2231995/GB/GuestBook.wml

波 兰 波 兰 http://www.polish-airports.com/wap/main.wml
机场信息 机 场 信 息
(波兰语)

SETI@Home 显 示 http://seti.matrix.pl/setiatwap/
级别列表 SETI@Home
级 别 列 表
Kuba
Urbaniak

第 7 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

域 名 检 测 和 注 册 http://wap.tldnames.com/
检测和注册 .com .net
.org 域名

PDFmail 安 全 的 http://www.sanface.com/wap/pdfmail.wml
WAP e-mail
有很多功能

有一些 URL 地址非常长,可以从下面的地址来选择:http://wap.colorline.no/links.wml。

16. 可以推荐一 些好的 WAP 服务商 吗?

下面有两个列表。表 10-2 提供免费的 WAP 主机服务,他们的服务相差很大,但是都是免费的。表 10-3

列出的是商业的 WAP 服务商,需要支付服务费。

表 10-2 免费的 WAP 服务商

 提供商 服务类型 地点

Tag Tag 免费的 WAP 站点主机和在线的基于 Java 的 WAP 站 美国


点编辑器

http://www.tagtag.com/

wapHQ 免费和独立的移动 Internet 操作 英国

http://www.waphq.co.uk/

WAP Service 免费的 WAP 公共服务 瑞典

http://www.wapservice.com/

Wappy 免费的 WAP 站点和重导向服务 荷兰

http://www.wappy.to/

SoWAP 免费的 WAP 主机(法文) 法国

http://www.sowap.com/

Freedom2Surf 真正免费的 HTML 服务,但是他们支持 PHP3 来提 英格兰


供 WAP 内容服务

http://www.freedom2surf.net/

第 8 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

Anytimenow.com 免费的 20M 空间,在线编辑和存储 wml 和 wmls 文 英格兰


件。同样提供 WAP email 服务,包括 Hotmail

http://www.anytimenow.com/

Hoiley.com 免费的离线 WAP builder - WMLedit (仍在"beta"版本) 德国

http://www.hoiley.com/

Waphome.ch 免费提供商,在德国,包括在线的基于 WAP 的转 瑞士


换服务

http://www.waphome.ch/

WapSpy 免费提供商,文件上传,图像库  

http://www.wapspy.com/

WapMine Windows 离线编辑器,WAPpage 美国

http://www.wapmine.com/

WapDrive 免费提供商"beta" version  

http://www.wapdrive.net

WAP Homes 免费提供商(在德国) 德国

http://www.wap-homes.de/

AddCom 免费提供商(在德国) 德国

http://www.addcom.de/

WapMatic 免费提供商(在英国和德国) 德国

http://www.wapmatic.de/

DeZines 几乎免费提供 WAP 环境,包括 PHP 国际


Webhosting

http://www.web-hosting.com/

Done 免费提供商(在土尔其和英国)。包括字典,游戏 土尔其


http://www.donetr.com/index.html

Start.no 很好的免费 WAP 站点。还有很多服务。在挪威 挪威

http://wap.start.no/

第 9 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

表 10-3 商业的 WAP 服务商

  提供商 服务类型 地点

wapHQ WAP,应用主机,合作应用 英国

http://www.waphq.co.uk/

Brainstorm Wireless Application Service 提供和开发商 英国伦敦

http://www.brainstorm.co.uk/

IntegrationWireless 创建移动商务 美国华盛顿

http://www.integrationwireless.com/

17. 以前没有 WAP 的经验 ,但是想 学,如何 动手?

建 议 在 站 点 wap.com 查 看 一 下 《 Beginner's Guide to WAP/WML 》 。

另外可以从 ASP Today(http://www.asptoday.com)中发现一些如何书写 WMLScript 的文章。许多人都会发

现在阅读了一些文档之后能很容易的上手。笔者也建议你在阅读了一些文章之后再开始做。

哪儿有一个 WAP 词汇表?

这里有一个词汇表(表 10-4)

表 10-4 词汇表

WAP Server 一个经常错用的词汇。一个 WAP Server 从真正的意义上来说和一个


HTTP Server 没 有 太 多 不 同 。 Nokia 将 他 们 的 HTTP Server 和 WAP
Gateway 集成产品也叫做 WAP Server。其实是一个内容提供服务器和网
关。网关完成网关的内容,内容提供服务器完成内容提供服务器的功能

WAP Gateway WAP Gateway 是一个两种模式的设备(像许多网关一样)。从 WAP 设


备这边来看,WAP 设备只懂得二进制格式的 WML,WAP 网关的功能
就是转换内容为这种格式。从 HTTP 服务器这边来看,WAP 网关可以
通过 HTTP 头提供附加的有关 WAP 设备的信息,例如 WAP 设备的电
话号码,电话 ID 甚至是位置信息

WML Card 一个在 WML Deck 中包含导航、用户交互的完整的 WML 块。一个或者


多个 WML 卡片必须包含在 WML Deck 中。WML Deck 就是 XML 文档。

第 10 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

(Deck 就是扑克牌盒,Card 就是每张牌)

WML Deck 一套 WML 卡片。整个 Deck 在请求的时候都将装入到浏览器中,然后


针对其中的每个卡片进行处理

SGML Standardized Generalized Markup Language

UA User Agent.能够解释 WMLWML,WMLScript,WTAI 或者其他格式的


代码的软件

WMLScript Scripting language for WAP devices。基于 JavaScript,但是功能比较弱

XML Extensible Markup Language。W3C 的 Internet Markup Languages 标准.


WML 是这些语言中的一种。XML 是 SGML 的子集

HDML Handheld Markup Language

W3C World Wide Web Consortium。http://www.w3c.org

WAE Wireless Application Environment

WSP Wireless Session Protocol

PDA Personal Digital Assistant 。 通 常 是 一 个 手 持 的 设 备 , 例 如 Palm


Pilot 。WAP 不是仅仅为蜂窝电话设计的,PDA 也可以支持

Element  一个元素指的是在 WML Deck 中的标记和结构信息

DTD Document Type Definition

WTP Wireless Transaction Protocol

WTLS Wireless Transport Layer Security。一个“等价于”SSL (Secure Sockets


Layer)的协议

WDP Wireless Datagram Protocol

19. 除了这个 FAQ,我在哪儿 能找到更 多关于 WAP 和 WML 的信息 ?

可以在本书的第 8 章 WAP 资源中找到很多相关的资源。

20. WAP 1.1 和 WAP 1.2 有什么不同 ?

现在主要的设备和应用或多或少的遵循 WAP 1.1 协议。WAP Forum 已经发布了 WAP 1.2 ,里面没有太多

值 得 注 意 的 不 同 。 毕 竟 一 个 协 议 不 能 进 化 得 太 快 。

总的来说,WAP 1.2 中有以下几个最重要的新特点。对每个特点最好参考 WAP 1.2 Specifications。


第 11 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

 新协议

UAPROF(User Agent Profile)。它基本上同意用户代理(可以近似理解为浏览器)使用一种方式来

告诉内容提供者它有什么样的功能。这样使得提供者可以格式化输出最好的功能到这个专门的用户代理。

PUSH. PUSHing 简单的说就是让应用服务器可以发送数据直接给用户代理。

 WML

accesskey 属性加入到<a>、<anchor>和<input>标签中。accesskey 属性将允许用户只需要按一个专门的

按键转跳到一个专门的锚或者输入框中。

<pre>标签看起来还没有在发布的版本中公布。我们将假设它和 HTML 中的 pre 标签具有同样的意义。

enctype 属性加入到 <go> 。使用这个可以知道发送的数据将进行加密处理,要么是 application/x-www-

urlencoded 或者 multipart/form-data。对于 GET,只引用前者。

align 属性增加到<table>。指定对齐内容使用 L、R、C 和 D 分别对左,右,中和默认。

<input>的格式化属性 Nf 已经从绝对数值变化到可以从 0 到 n。

字符编码不在依靠指定的专门的<meta>标签。

 WMLScript 标准库

URL 库已经确认为 RFC2396。

在字符串中如何表示非 US-ASCII 字符。非 US-ASCII 字符必须转换成本地可用的字符集。

21. 在 WAP 中如何 实现多媒 体流?

在一家叫做 Sontora (http://www.sontora.com)的公司发布一些有关 Mobicast 的信息之前,这被认为是

不可能的。 Sontora 的一些有关 Mobicast 的信息将可以在任何 WML 1.1 的设备上使用声音流,包括

MP3、Windows Media 和 RealAudio,并且不需要对设备进行任何的修改。要想得到更多的信息,可以浏览

他 们 的 站 点 。

以前说不能是因为 WAP 协议不允许操作硬件。更谈不上播放音乐了。即使是 Web 的协议也不可能。对于

Web 环 境 是 使 用 插 件 来 解 决 的 。 但 是 对 于 WAP 环 境 没 有 插 件 。

其实,可以使用 WAP 来点播歌曲,然后使用电话呼叫,将歌曲传送过来,就像语音传递那样。

二、 关于 WML 的常 见问答
第 12 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

1. 简单说 WML 代表什么?

WML 代表“Wireless Markup Language”。WML 就是无线标记语言(Wireless Markup Language),内置

于移动设备中的微型浏览器能够解释这种标记语言。虽然它和 HTML 语言很相像,但 WML 其实是 XML

的一个应用子集。

2. 什么是 WML?

WML 代表 Wireless Markup Language,就象 HTML 对普通的 Web 浏览器一样。有人说它是基于 XML,

但是更准确地说 WML 是 XML 的一个应用。虽然在语法上和 HTML 相似,但更多的是 XML。如果准备从

HTML 到 WML,但是没有任何的 XML 知识,将会发现 WML“非常”严格。就像 HTML,WML 被读取并

且通过 WAP 设备中的浏览器解释,然后显示在屏幕上。对于 WAP 设备,浏览器,或者用户代理,通常叫

做 微 型 浏 览 器 。 微 型 浏 览 器 的 功 能 是 受 到 WAP 设 备 的 限 制 的 。

为什么使用 WML 而不是使用广泛的 HTML 原因是由于 WAP 的工作方式以及 WAP 是为一个“窄小”

的无线世界工作的。在 Netscape、Opera 或者 IE 上显示 HTML 需要更强的计算能力。计算能力某种意义上是

移动设备中的电能。由于移动设备中的电能是有限的,所以 WML 在发送给 WAP 设备之前,通常要经过转

换 和 压 缩 。 所 以 WAP 使 用 的 是 WML 。

读者也许可能想到 WML 非常简单,甚至不能处理 HTML 中的多媒体类型。这个不是问题。标记语言

(WML、HTML 等等)没有操作设备的权限,例如播放声音或者显示动画。仔细地观察 HTML,就会发现

没有一个 HTML 标签能够显示动画或者播放音乐。限制是来自于运行标记语言的浏览器。毕竟在大多数情

况下,是谈论移动电话。但是这个限制应该随着无线 Internet 的发展而逐渐取消。

3. WML 与 HTML 有什么 区别?

虽然 WML 看起来十分像 HTML,但是在技术上两者的差别还是很大的。 WML 是为微型浏览器所设计

的 HTML 的一个子集。WML 的标准定义是基于 XML 的。

4. Phone.com 的 HDML 和 WML 有什么区别 ?现在有 电话支持 HDML 吗 ?

HDML(Hand-held Devices Markup Language)是 Phone.com 开发的。它使得 Web 页面可以在移动电话上

显示,其标准的公布先于 WAP 标准。Motorola、 Neopoint、Qualcomm 等等公司的电话使用 Phone.com 的浏

览器,它支持 HDML。最新的 UP.Browser 支持 HDML 和 WAP。

5. 为什么 使用 WML 而不是 HTML?

首先是 WAP 协议要求使用 WML。可能已经有能够支持 HTML 的 WAP 设备,但是那不是真正的。有一

些和无线设备很像的 WAP 设备支持 HTML ,但它们也不是直接使用 HTML (例如: Microsoft Mobile

第 13 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

Explorer 支持 HTML 和 WML)。MME 设备只是将两个分离的部分做到了一起。当然也有 HTML 的变种,

例如 iMode 浏览器使用 Compact HTML 。简单的说,如果谈论 WAP 设备,那么标记语言就是 WML 。

有很多理由说明选择 WML 而不是 HTML。现在最重要的一个原因就是 WML 与 HTML 相比需要很小的

带宽。随着无线技术的提高,带宽会越来越宽。这个原因可能不再是主要原因,但是在达到这么高带宽之

前 需 要 许 多 年 的 时 间 。

另外一个就是 HTML 需要相对来说比较强的处理器。处理器的能力意味着需要更强的能量。在无线设备

中能量来自于电池。而一个低处理能力的处理器就意味着电池的使用时间可以更长。

另外,HTML 的确需要一个很大的显示屏幕。移动电话上的屏幕显然不能满足要求。当然也许会有一个

大屏幕的移动电话,但是这样它就离移动更远(也就是说越不像移动电话)。即使 iMode 支持彩色和一个

类似 HTML 的显示,它的尺寸已经是你可以方便携带的最大尺寸。

6. 为什么 对于无线 设备要专 门设计一 种特别的 语言才能 访问 Internet ?

许多年来,HTML 标记越来越丰富,越来越庞大。此外,浏览器对各种 HTML 标记的支持也大不相同。

这 种 状 况 已 经 与 当 初 想 建 立 一 个 简 单 的 标 准 相 背 离 。

移动设备(例如:移动电话)具有小屏幕、内存少、缺少方便的输入设备和带宽窄的特点。这种状况驱使

WAP 讨论组发展一种新的为无线设备所使用的语言,WML 就此诞生了。

7. 无线设 备也能支 持 HTML 格式吗 ?

从技术的角度上来说答案是肯定的。既然 HTML 是为普通 PC 浏览器所编写的,也可以使用微型浏览器

来浏览一个 HTML 页面,但是可能没有效果。因为移动电话不知道如何显示该文件。这样通常导致微型浏

览器出现混乱。并且 HTML 页面通常都比较大,它会把移动设备“撑坏”的。

8. 如何将 HTML 转换成 WML?

当考虑转换 HTML 时,要想到 WML 是为小屏幕设计的,不可能像 HTML 那么丰富多采。任何转换都将

忽略很多 HTML 标记和许多内嵌的脚本。只有一些简单的 HTML 页面可以被满意地转换。转换可以使用工

具包如:Spyglass Prism,也可以通过在线的 WAP 网关过滤。

9. 用什么 可以浏览 到 WML 页面?

首先需要一个具有 WAP 功能的手机,例如:Nokia 71110,Ericsson R320 等等。用于 PC 机的桌面 WML

浏览器也很多,例如:WinWap、WapMan 等等。

10. 在哪里可以 学到更多 的关于 XML 的知识?

可以访问站点:www.w3c.org/xml。在该网站上有许多关于 XML 的知识有详细的讲解。

第 14 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

11. WML 的一般 语法是什 么?

WML 非常像 XML。和 HTML 相比其语法规则更加严格,从而保证当微型浏览器解析和解释的时候不会

有 太 多 的 错 误 信 息 。

和 HTML 一样,WML 使用“<”和“>”组成的格式化标签。许多标签都是以<tag>开头,以</tag>结尾。在

开头或者结尾中包含的部分叫做元素。有些标签叫做空元素,只有标签,没有内容,如: <tag/> 。

许多元素有属性来描述应其中还有那些内容。属性名字必须小写,并且属性值必须使用双引号括起来。

有 些 属 性 是 必 须 的 , 有 些 是 可 选 的 。 一 般 的 属 性 标 签 格 式 就 像 : <tag attribute1="value"> 。

变 量 可 以 在 WML 卡 片 中 定 义 , 它 们 的 一 般 格 式 是 $(variablename) 。

一个 WML 页面有一个专门的格式,它必须以 XML 的文档声明为开头:

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM/DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

所有的页面中的元素,都必须在<wml>和</wml>标签之间。

12. 什么是一个 “ deck”?

一个 WML 文档有许多卡片(cards)组成。一个卡片是一系列完整的 WML 代码。这些卡片被称为一个

“deck”。卡片和“deck”的概念就有点像 HTML 中的锚标记<a name="#achor1">和一个 HTML 页面。也就是

说卡片是“deck”中的一个组成部分。也可以把“deck”称为 WML 中的页面。它们之间的关系可以比做一副

扑克牌。整副扑克牌就是 deck,而每一张牌就是 card。

13. 什么是 WML 的“ deck”?

WML 的“deck”或者 WML 文件是指 decks。每个 deck 包含一个或者更多的 card。每个 deck 都以<wml>开

始 和 结 束 。 并 且 每 个 card 都 以 <card> 开 头 或 者 结 束 。

当 WML 微型浏览器处理 WML 文件或者 deck 的时候,它阅读整个 deck,并且在 deck 内的各个 card 之

间进行导航。当装入 deck 的时候, deck 里面所有的 card 都已经装入到内存中,直到浏览器装入另外的

deck 。

如果熟悉 HTML 中的<a name>标签。WML 的<card>标签将是非常类似的:

<wml>

<card id="start_menu">

...some code...

</card>

第 15 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<card id="purchase">

...some more code...

</card>

</wml>

deck 和 card 可以按照这种方式调用:[deckname][#cardname]。如果 deckname 省略,那么浏览器就会查

找当前内存里的 cardname 名字的 card。如果使用了 deckname 和#cardname ,那么浏览器将装入 deckname

的整个 deck,然后跳入到#cardname。这个和 HTML 的工作方式很像。

14. WML 是大小写敏 感的吗?

是的!要注意 WAP 1.1 使用小写的标签。

15. 如何显示一 个美元符 号?

使用两个在一起的美元符号来表示,即“$$”。

16. 想显示价格 的格式该 怎么办?

“$”是一个特殊的字符,使用“$$”来显示一个“$”。

例如:

<p>

The price is $$11.20

</p>

17. fieldset 标签有什么 作用?

编写 WML 页面的时候要考虑到设备的屏幕很小。如果试图想把一个大的 form 在一个屏幕里面显示,就

要指定那些标签保持在一个屏幕中。那么 fieldset 标签将这些标签捆绑在一个屏幕上。

18. postfield 标签有什么 作用?

postfield 标签使允许提交参数到服务器端。注意有些早期的模拟器还不支持该标签,这将给开发工作带

来麻烦!

19. WML 有类似 HTML 的 <mailto>标签吗?

没有。但是你可以使用 WML 表单和服务端脚本来得到同样的效果。


第 16 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

20. 无法让 <input/>格式正常工 作是怎么 回事?

至少 Nokia WML Reference 没有讲清楚有关<input/>标签的用法。format 参数控制着用户输入数据的类型

和 长 度 。

注意到不是所有的 WAP 1.1 浏览器都接受所有的格式化代码。例如: Nokia 7110 就支持得不是很好。

Mitsubishi Trium 在处理“*f”代码的时候有点问题,“*”必须为 1 或者更大。专门的格式化代码如下:

从 A 到 Z 的任何大写字母,没有数字或其他字符。

从 a 到 z 的任何小写字母,没有数字和其他字符。

任何 0 到 9 的数字。

从 A 到 Z 从 0 到 9 的任何字符。

从 a 到 z 从 0 到 9 的任何字符。

任何字符,输入默认从大写开始。

任何字符,输入默认从小写开始。

*f

(星号)意味着任何数字(包括 0),f 是格式的代码。

nf

意味着恰好要输入的字符个数。n 从 1 到 9。f 是格式代码。

第 17 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

是转义输出字符。

格式化字符可以组合使用来表示一种特定的格式输入。但是强制一定的输入应当避免在用户出错的时候

没有提示信息。如果输入是不正确的,该填写的区域一般仍保持空白,直到让用户知道应该输入什么。如

果只想输入数字,使用“ *N”那么将直接转跳到数字输入模式。如果只想输入大写的字符,使用“ *M”转

跳 到 大 写 输 入 模 式 。 现 举 一 些 例 子 :

“N” 只 接 受 一 个 数 字 字 符 。

“*N” 接 受 任 何 数 字 字 符 。

“NN” 只 接 受 2 个 数 字 字 符 , 不 多 不 少 。

“ANN” 接受 一个 大写 字符 (没 有数 字) ,后 面跟 着两 个数 字, 不多 不 少 。

“X*N” 表 示 可 以 接 受 一 个 字 符 ( 没 有 数 字 ) 后 面 跟 着 任 意 多 的 数 字 字 符 。

“NNN\-NNN\-NNNN” 表 示 接 受 美 国 的 电 话 号 码 格 式 , 例 如 : “ 123-456-1234” 。

“2N\:2N\:2N” 表 示 接 受 时 间 格 式 , 例 如 : “ 12:02:34” 。

“NNNNNNNNN” 表 示 接 受 9 个 数 字 字 符 。

“9N” 同样表示接受 9 个数字字符。

maxlength 参数控制着输入字符的总个数。

21. 如何防止一 个空的 field?

在大多数情况下需要知道用户确实是输入了一些内容在 field 中,不能让这些内容为空。这个可以通过在

服 务 端 的 检 测 来 完 成 , 也 可 以 通 过 WML 来 完 成 。

在 WML 中 , 这 个 检 查 可 以 通 过 合 适 的 格 式 化 代 码 来 完 成 , 或 者 使 用 一 个 在 input 标 签 中 叫 做

emptyok="false" 的参数来实现(只有当必须要求用户输入的时候才使用)。如果使用了 value="something"

或 者 value="" 用 户 仍 然 可 以 发 送 空 的 fields 。

以下的行将接收任何值到 username field, 甚至用户将整个 field 清空。另外 field 中没有任何东西,也能够

提交 form。

<input name="username" type="text" value="things" format="*M"/> 

除了用户将整个 field 清空,以下的行将接收任何值到 username field。如果 field 是空的,他将不能提交

form,。

<input name="username" type="text" value="things" format="M*m"/>

以上的应用是针对大多数的浏览器。在 Nokia 7110 ,emptyok 参数可以有同样的效果:

第 18 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<input name="username" type="text" value="things" format="*M" emptyok="false"/>

22. 使用 option 标签的 时候,无 法一屏显 示完该怎 么办?

许多 WAP 电话的显示屏幕只能显示三到四个选项。按以下的方法分割 option 字段就可以输入更多的选

项。

<select title="longselectlist">

<optgroup title="option1">

<option>option1-1</option>

<option>option1-2</option>

<option>option1-3</option>

</optgroup>

<optgroup title="option2">

      <option>option2-1</option>

          <option>option2-2</option>

          <option>option2-3</option>

</optgroup>

<optgroup title="option3">

          <option>option3-1</option>

          <option>option3-2</option>

          <option>option3-3</option>

</optgroup>

</select>

23. 想有一个永 久的 BACK 在屏幕的右 下方。有 些好像是 自动的, 若没有, 该怎么做 ?

可以加入以下代码。

<do type="prev" label="Back">

</prev>

</do>

更好的是使用 template。

……

第 19 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<template>

<do type="prev" label="Back" name="back">

</prev>

</do>

</template>

……

24. WAP 支持列 表吗?

是的,WAP1.1 支持列表和相关的标记。

25. 可以在 WML 中使用 表单吗?

可以。但是 Nokia 7110 在显示表单的时候有些问题。

26. WML 支持什么样 的表单提 交方式?

WML 支持 GET 和 POST 方式。但是 Nokia 7110 在处理 GET 方式的时候有些问题。

27. WML 中如何增加 参数到 URL 字符串 中?

和 HTML 的工作方式很像,如下所示:

……

www.someserver.com/someurl?parameter1=value1&amp;parameter2=value2

……

唯一的不同是将“&”变成“&amp;”。

28. 如何从 WML 向 ASP 传送数据?

假 设 有 一 个 ASP 叫 做 “ myasp.asp” , 并 且 有 一 个 WML 变 量 叫 做 “ wmlvar” 。 当 发 出 请 求

“myasp.asp?wmlvar=something”,可以使用下面的方法得到变量的内容。

dim aspvar

aspvar = Request.QueryString("wmlvar") 

ASP 变量“aspvar”将包含字符串“something”。当然 ASP 变量也可以与 WML 变量同名。

29. 如何让 WML 页面自 己更新?

有过 Web 经验的人喜欢使用:

第 20 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<meta http-equiv="refresh" content="1;http://somewhere.com/"> 

来强制浏览器自动更新。

虽 然 在 WAP 中 也 支 持 一 些 META 标 签 , 一 个 更 好 的 办 法 是 使 用 <ontimer> 标 签 。

以下的代码显示了如何自动转跳到另外一个卡片:nextdeck.wml。

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

      <card id="splashscreen" ontimer="nextcard.wml">

          <timer value="40"/>

          <p>Please wait for the timer to run out...</p>

      </card>

</wml>

下面的代码将强制浏览器在一段时间后重新装入同一个卡片。这个页面叫做 loop.wml。

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

      <card id="loop" ontimer="loop.wml">

          <timer value="40"/>

          <p>This text will be shown over and over again...</p>

      </card>

</wml>

注意必须避免浏览器可能要使用的 cache 机制。

30. WML 页面的最大 大小是多 少?

1397 bytes/deck

31. WML 页面的限制 是多少?

由于 WAP 设备只有很少的内存,因此就存在着一个最大的 WML deck 的界限。这里没有一个绝对的标

准 , 根 据 浏 览 器 的 不 同 而 不 同 。 表 10-5 列 出 了 几 种 浏 览 器 的 限 制 。

注意 WML deck 的大小是指编码压缩成二进制格式下的大小,一个没有压缩的 WML deck 可能很大,

第 21 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

但是压缩后可能比较小。

表 10-5 不同浏览器的限制

浏览器 压缩后的 WML 大小限制

UP.Browser 3.2 1492 bytes

UP.Browser 4.x 2048 bytes

Ericsson R320 大约 3000 bytes

Ericsson R380 大约 3500 bytes

Ericsson MC218 多于 8000 bytes

Nokia 7110 1397 bytes

32. 如何防止对 WML 页面的非法 访问?

WAP 可以防止通过 HTTP 协议对文件和目录的非法操作。注意:有些 WAP 模拟器和虚拟的 WAP 浏览器

可能不支持这个特点。在这个时候是不知道是否有可能使用其他类型的验证方式。

为了使用这种方式,用户的 HTTP 服务器必须支持这个特点,其实大多数服务器都支持。当一个 WAP

浏览器请求一个 URL,它将提醒用户输入用户名和密码。这些都转换成无法直接阅读的字符,但不是加密。

也就是说如果网络上有人在使用合适的设备监听,那么用户名和密码将被泄露。

这个特点在 Apache 文档中有详细的说明,但是文档的描述很弱,这里有如何在 Apache HTTP 服务器上

配置的说明:

要保证 Apache 已经配置过,使得一个名叫.htaccess 的文件可以覆盖全局的操作配置。操作配置既可以在

每个目录使用分离的文件,也可以在全局的 access.conf 中。但是在这个例子中,我们将集中在 .htaccess 文

件上。并且检查 AllowOverride 的设置。这个必须设置到 AuthConfig,那样意味着 Apache 在目录中寻找 .

htaccess 文 件 , 并 且 使 用 该 文 件 中 的 规 则 。 记 住 在 配 置 后 要 重 新 启 动 Apache 服 务 器 。

下一步是在目录里放置需要保护的文件叫做.htaccess。(注意点代表文件名的开头)。一个.htaccess 文件

的基本内容如下:

AuthType Basic

AuthName "WAP FAQ Authentication Demo"

AuthUserFile /home/httpd/html/wap-faq/extras/auth/auth.passwd

require valid-user 

第 22 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

AuthType 设置是指定验证的类型,AuthName 指定领域,AuthUserFile 指定口令文件的位置,require 指

定所想得到的操作。在这个例子中,任何在口令文件中的用户都有一个正确的口令。

现在需要产生一个口令文件,Apache 使用一个叫做 .htpasswd 来完成这个特殊格式文件的生成。运行程

序如下:

#htpasswd /home/httpd/html/wap-faq/extras/auth/auth.passwd demo

New password:

Re-type password:

Adding password for user demo

注 意 : 在 第 一 次 创 建 文 件 的 时 候 , 必 须 使 用 “ -c” 选 项 。

现在加入了一个叫做“demo”的用户,并且输入了他的密码两次。考虑到安全的原因,口令文件不应该

放 在 文 件 根 目 录 下 。 笔 者 在 这 里 只 是 做 演 示 。

现在最后就是测试,笔者建议使用 HTML 浏览器。输入含有想保护的 URL 目录的地址,一个对话框就

会 弹 出 来 询 问 用 户 名 和 口 令 。 如 果 一 切 顺 利 , 就 可 以 使 用 WAP 浏 览 器 来 测 试 了 。

一个目录保护的例子在这个服务器上,用户名是 demo,口令是 demo。可以使用 HTML 或者 WML 浏览

器 来 做 测 试 。

这 个 例 子 同 样 可 以 通 过 输 入 http://wap.colorline.no/demos.html 来 得 到 。

或 者 只 要 点 到 保 护 的 区 域 :

http://wap.colorline.no/wap-faq/extras/auth/

或 者 查 看 .htaccess 文 件 。

最后点击查看口令文件的内容。

33. 怎么使用非 拉丁字符 ?

在 文 件 开 头 加 上 :

encoding="ISO-8859-1"?

或 者 :

encoding="UTF-8"?

ISO-8859-1 和 UTF-8 编码支持更多的字符。

34. 一些特殊字 符破坏了 代码和连 接该怎么 办?

锚/链接有时候包含了一些字母和数字之外的字符。典型的如:“~”(波浪号)和“&”(与号)。如果

根据书编程,就应该告诉 WAP 浏览器使用的是什么字符集。这个在 XML 定义中可以完成:

<?xml version="1.0" encoding="iso-8859-1"?> 


第 23 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

“iso-8859-1”是 Latin 字符集。这个应该在大多数场合下能满足需要。但是,还是需要对那些转义字符进行

转 义 。 即 使 指 定 了 字 符 集 , 也 是 没 有 用 处 的 。

字 符 实 体 是 某 些 特 殊 字 符 的 标 准 名 字 , 例 如 : “ &” 就 是 “ &amp;” 。

大多 数浏 览器 在反 编码 名字 实体 的时 候会 出现 问题 ,例 如 Nokia 列 出了 7 个兼 容的 名字 实体 :

“quot”、“amp”、“apos”、“lt”、“gt”、“nbsp”和“shy”。只有在使用它们的十进制代码的时候(在上述所

说的 Link 中),浏览器可以显示几乎所有字符。如果 Nokia 的浏览器接收到无法支持的实体名,它就会崩

溃 。

通过使用 HTML 或者 WML 浏览器(在 HTML 格式下,虽然不是很好),可以操作在线的实体名列表,

该 列 表 在 http://wap.colorline.no/wap-faq/apps/charentref.html 。

这 个 表 同 样 有 一 个 例 子 在 : http://wap.colorline.no/demos.html 。

第一步,选择将要使用的字符集, Latin1,Latin1 Mathematical 和 Greek symbols,最后是 Latin1 Markup

symbols。注意到列表被分割了,是由于 deck 的限制。真正的列表显示了实体名,实体的十进制值和真正的

符 号 。 从 这 里 就 可 以 看 到 哪 个 字 符 浏 览 器 可 以 显 示 。

注意上面的在线列表,不要设置为“charset=iso-8859-1”(真正的 Latin1),那是个 XML 定义。

35. 可能在 WML 页面上 显示一个 可选的 Link 吗?当用户 选择后就 可以直接 拨号?

现在不行。但是一旦支持 WTAI 的设备出现,那么就可能实现。

三、 关于 WAP 开发的 常见问 答

1. 开发 WAP 软件需 要哪些工 具?

为了开发 WAP 应用程序,需要一个 WAP 网关(注意:这里的网关可能是指支持 WML 的服务器。可以

通过配置 WWW 服务器达到这个目的)和 WAP 工具包。工具包应当包括模拟器和能让开发者浏览 WML

网页。WML 页面的开发和 HTML 页面的开发一样,可以使用 Notepad 或者其他文本编辑器来进行编辑。

2. 有哪些 公司现在 提供这样 的开发环 境?

Nokia 、 Ericsson 、 UpPhone 和 Motorola 都 提 供 免 费 的 WAP 网 关 和 工 具 包 。

Nokia : Nokia Toolkit 和 Nokia WAP Server 。

Ericsson : Ericsson R320 和 WapIDE 。

UpPhone : UpPhone SDK 。

Motorola:Motorola ADK。
第 24 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

3. 开发 WAP 应用一 定要有 WAP 手机吗 ?

不是,当开发 WAP 应用的时候,不一定需要 WAP 手机。模拟器可以帮助开发者解决大部分的问题。但

是如果是开发商业网站,特别是想知道各种移动电话在显示 WML 页面上的差别的时候,最好是配备一个。

目前各种手机对 WML 标记的支持和中文的支持状况大不相同,因此 WAP 手机还是必要的。

4. 开发者 需要一个 WAP 网关吗 ?

不是很必要。如果只想进行简单的 WAP 内容服务,可以使用现有的 Web 服务器(只需要修改 MIME 类

型 ) 。 移 动 电 话 会 通 过 坐 落 在 本 地 的 网 关 连 接 到 你 的 服 务 器 上 。

但是在网关上驻留开发者的程序有很多好处。既然开发者的程序是网关的一个部分,开发者就可以知道

呼叫号码、身份、位置等等。

5. 可以看 到 WML 的源代 码么?

如果开发者使用 SDK 浏览的时候将能够看到 WML 的代码。如果只有一个 HTML 浏览器,可以访问

“Fetch Page”服务(http://www.webcab.de)来取得代码。这个可以显示在 Internet 上的任何 WML 页面中。

6. 可能在 WML 中加入 applets 吗?

不能。

7. 可以使 用 HTML 开发工 具来开发 WAP 应用吗 ?

在大多数情况下开发工具是使用基于 PC 的浏览器。HTML、JavaScript 和 Java 对于 WAP 开发来说都没有

用 处 。 但 是 , 越 来 越 多 的 开 发 工 具 在 加 入 对 WML 的 支 持 。

Allair 的 Cold Fusion 4.5 和 HomeSite 已经有 WML 支持,虽然 Allair 也许需要清除一些 BUG。另外 PHP

和 ASP 在 Coldfusion/HomeSite 也 能 支 持 。

可以到 Marjolei Katsma 的 HomeSite Help site 上得到更多的信息。

8. 可以通 过 WML 页面来 操作数据 库吗?

可以,与创建 HTML 页面相同。任何相关的服务器端的技术都可以用来生成 WML 页面。

9. 可以使 用 CGI 生成 WML 页面吗 ?

当然。可以用创建 HTML 同样的方法来创建 WML。如果想书写一个 CGI 来创建 WML,只要记住在页面

的开头正确设置 MIME 类型。具体的形式根据所使用的语言不同而不同。例如在 Perl 中:

print ("Content-type:application/vnd.wap.wml \n\n\n"); 

注意至少要使用 2 个换行。
第 25 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

10. 如何使用 Cold Fusion 来生成 页面?

使用 Cold Fusion 只需要加上:

<CFCONTENT type="text/vnd.wap.wml">

11. 如何使用 PHP 来书写动态 的 WML 页面?

PHP(和大多数其他服务端脚本语言一样)可以被用来书写动态的 WML 内容。只需要将输出的标记限

制 在 WML 微 型 浏 览 器 可 接 受 的 范 围 内 。

注意 PHP 有很多内建的 HTML 功能,特别是错误功能,这些功能 WML 微型浏览器可能无法识别。

PHP 同样可以在一个 HTML 文件中编写出既适合于 HTML,也适合于 WML 的内容。PHP 的源代码对于

客户端来说是不可见的。因此可以针对 HTML 浏览器输出 HTML 页面,针对 WML 浏览器输出 WML 页面。

可以在开发 PHP 编写的 WML 页面的时候把以下代码加在开头:

<?

// header("Content-type: text/vnd.wap.wml");

  echo("<?xml version=\"1.0\"?>\n");

echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

//"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n");

?>

基于 PC 的浏览器将忽略这些无法理解的 WML 标记。但是如果想在 WAP 设备或者模拟器上测试的时候,

只需要将"//"去掉,页面自动变成 WML 页面。

12. 使用 PHP 动态输 出 WML

这些例子生成一个非常有用的应用叫做: PizzaCalc。它将输入所有的 pizza 的帐单和人的数目,可以算

出 每 个 人 的 花 费 。

应用生成一个动态的页面叫做“calc”或者“input”。注意到所有的转义字符例如双引号。该页显示了一个

简 单 的 变 量 处 理 , 和 如 何 传 递 参 数 到 另 外 的 卡 片 :

使 用 WML 浏 览 器 就 可 以 测 试 应 用 程 序 :

http://wap.colorline.no/wap-faq/apps/pizzacalc.html 。

或 者 输 入 :

http://wap.colorline.no/demos.html 选择应用。

第 26 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<?

header("Content-type: text/vnd.wap.wml");

echo("<?xml version=\"1.0\"?>\n");

echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

\"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n");

echo("<!--The application PizzaCalc was originally made by The Crusaders

www.crusaders.no on the Commodore Amiga -->\n");

echo("<!-- It was unfortunately not possible to emulate the crap interger handling of the

original program -->\n");

?>

<wml>

<?

  if($action == "calc") {

      echo("<card id=\"result\" title=\"PizzaCalc\">\n");

      echo("<do type=\"prev\" label=\"Back\">\n");

      echo("<go href=\"pizzacalc.html#input\"/>\n");

      echo("</do>\n");

      echo("<p>\n");

      echo("The cost per eater will be ".$total / $eaters."<br/>\n");

  }

  else {

      echo("<card id=\"input\" title=\"PizzaCalc\">\n");

      echo("<p>\n");

echo("<anchor>Split Pizza bill

<go href=\"pizzacalc.html?total=\$(total)&eaters=\$(eaters)&action=calc\"/>

</anchor>\n");

      echo("<br/>\n");

      echo("Total cost: <input type=\"text\" name=\"total\" format=\"*N\"/>\n");

      echo("Eaters: <input type=\"text\" name=\"eaters\" format=\"*N\"/>\n");

  }
第 27 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

?>

</p>

</card>

</wml>

13. 可以使用 Java Servlet 来生成 WML 页面吗 ?

当然。可以使用创建 HTML 同样的方法来创建 WML。如果想书写一个 CGI 来创建 WML,只要记住在页

面 的 开 头 正 确 设 置 MIME 类 型 :

response.setContentType("text/vnd.wap.wml");

14. 可以使用 ASP、Perl 等生成动态的应用吗?

是的。可以使用任何服务器端的脚本语言来生成 WAP 应用。

15. 如何使用 ASP 书写 WML 内容?

ASP(Active Server Pages)可以做到和 PHP 一样,也可以用来书写动态的 WML。如果需要一些好的例

子请参考 Luca Passani's WAP and ASP articles。或者查看 Jean-Luc Praz's (jeanluc@corobori.com)。更多的 ASP

例子在:http://www.corobori.com/wap/。

16. 使用 ASP 动态 输出 WML 页面 时候 ,已 经设 置了 Content-type,但 浏览 器返 回的 仍然 是 text/html,有什 么问 题吗 ?

如果在 ASP 脚本中有一个错误,那么诊断程序会发还一个 HTML 页面,请检查脚本。

17. 在使 用 ASP 生成 WML 页面的 时候 出现 了错 误: <MIME type "text/html" is not supported>,会是 什么 问题 ?

这个问题是 Web 浏览器不知道 WML 的正确类型,修改 ASP 的第一行,加入:

<Response.ContentType = "text/vnd.wap.wml"> 

后就可以工作了。

18. 下面的代码 有什么问 题吗?

<%Response.ContentType = "text/vnd.WAP.WML"%>

<?xml version="1.0"?>

去掉<?xml version="1.0"?>之前的空格。XML 解释器希望在这行中没有其他字符,甚至是空行。

19. ASP 代码可 以在模拟 器上工作 ,在真正 的浏览器 上怎么不 行?

在很多模拟器上没有像真正的 WML 浏览器那么严格。这些对于那些没有使用网关的模拟器( Nokia


第 28 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

SDK/Toolkit ) 来 说 更 是 这 样 , 有 些 就 根 本 没 有 使 用 网 关 ( WinWAP 、 WapMAN ) 。

一个真正的 WML 浏览器应该只读取二进制的数据(从 WML 编码得来的)WMLC,对于网关应该将文

本 WML 转换/编译成 WMLC。语法是非常严格的。ASP 是为 HTML 浏览器设置的,但是 HTML 没有 WML

那 么 严 格 。

这里在 ASP 生成动态页面的时候有一个微小的“bug”。它在 WML 浏览器上不允许有任何地方输出白行

(例如:空格,回车,换行)。注意到有些网关可能会修正这些问题,但有的则不管(例如: CMG 网

关 ) 。

下面是一个常见的 ASP 代码用来输出 WML 页面开头的 MIME 类型:

<%Response.ContentType = "text/vnd.wap.wml"%>

<?xml version="1.0"?>

问题就在 ASP 将会在 .wml"%> 和 <?xml vers 之间输出换行和回车。这两行就被分割了。这将打乱 WML

代码的内容。WML 必须以“<”开头,而且第一行是<?xml version="1.0"?>。就上面的 WML 页面回车/换

行 将 会 出 现 问 题 。

最简单的解决办法是:

<%Response.ContentType = "text/vnd.wap.wml"%><?xml version="1.0"?>

在 XML 定义正确的格式化以后,后面的部分 WML 对空格就没有那么严格的要求。

要注意的是有些网关在输出 ASP 的时候会有问题,因此在 WML 代码中最好使用 Response.Write 而不

是<%=MyVar%>。

20. 如何使用 Perl 来生成 WML 内容?

和 其 他 Server 端 程 序 一 样 。 Perl 也 可 以 用 来 书 写 漂 亮 的 WAP 应 用 程 序 。

最常见的就是如何使用 Perl 输出正确的 MIME 类型,下面的例子说明了这一点:

print "Content-type: text/vnd.wap.wml\n\n";

print "<?xml version=\"1.0\"?>\n";

print "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

\"http://www.wapforum.org/DTD/wml_1.1.xml\">\n";

print "<wml>\n";

……

21. 应当如何下 手书写 WAP 应用程 序?

其 实 需 要 的 只 是 Text 编 辑 器 。 但 是 使 用 一 个 开 发 工 具 可 以 节 约 很 多 时 间 。

第 29 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

在 这 之 前 应 该 浏 览 一 下 WAP 的 权 威 站 点 : www.wapforum.com 。

在 Nokia WAP 开发论坛中进行注册,并且下载 Nokia WAP Developer Toolkit 。Toolkit 中的 PDF 文件可以

给出一定的 WML 和 WMLScript 指导。Nokia Toolkit 需要 JRE (Java Runtime Environment) v.1.2.2 或者更高

版 本 。

虽然工具可以用来为 WAP 设备设计应用,但是不是为专门的移动电话。在 WAP 开发工具上所看到的并

不代表用户在手机上所看到的。为了确定想看到的事情,最好需要一个 WAP 设备,例如移动电话,或者

模 拟 器 。

Nokia WAP SDK 2 有一个 7110 的模拟器。模拟器是一个有效的检测方式,能检测程序中的 bug。 Nokia

SDK 同 样 还 包 括 一 个 小 的 WAP server 让 开 发 者 可 以 从 本 地 或 者 HTTP 服 务 器 上 下 载 WML 页 面 。

到 Phone.com 开发站点注册后, Phone.com 提供 UP.browser 。这是最流行的浏览器,特别是在美国,

Phone.com 提 供 UP.SDK 。 在 注 册 之 后 就 可 以 下 载 。

对于 Ericsson R320 和 R380 是最近的事情。应该注册并查看 Ericsson's Developer's Zone 来得到开发工具。

R380 是一个非常好的模拟器,在 Symbian 不需要注册就可以下载。Ericsson 没有公开的为 R320 的模拟器。

Motorola 有一个平台叫做 Mobile Internet eXchange 或者 MIX 。Mobile Application Development Kit 已经

开发出一个开发平台,即为 WAP 也为 Motorola 的 VoxML。在注册后,可以在下面的网址找到数据包。

http://www.motorola.com/MIMS/MSPG/cgi-bin/spn_madk.cgi. 

WAPmine 是一个独立的应用,叫做 WAPPage 是一个所见即所得的编辑工具。而且有一个 XML 树型控

件 来 编 辑 WML 标 签 。

如果在开发公共应用程序时,想在很多设备上测试你的程序,就像在不同的浏览器上测试 HTML 页面

一样。注意在不同的 WML 浏览器上的差别,可能比在不同的 HTML 浏览器上的差别要大。

22. 如何编写和 测试 WML 页面?

现在有很多 SDK。AnywhereYouGo.com 有 WAP SDK 和 IDE 列表,可以下载一个来用。任何文本编辑器

都可以书写一个简单的 WML 页面,当然 HTML 编辑器也可以(特别是那些支持个人定义标签的),例

如:Allaire Homesite (http://www.allaire.com )。可以使用 SDK 来做简单的测试,但是对于大的项目可能

要困难些。AnywhereYouGo.com 已经建立一套基于 Web 的工具来帮助 WAP 测试。

23. 哪儿可以在 找到 WML 的测试 工具?

首 先 确 定 WML 代 码 是 正 确 的 , 然 后 再 使 用 WML 测 试 工 具 。

有一个非常好的测试工具在 Zygo Communications (http://wap.z-y-g-o.com/tools/ ),测试工具是用 Perl

写的。里面还有其他的工具可供下载。
第 30 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

24. 如何操作 WML 页面?

操作 WML 页面或者卡片,最简单的办法是通过现有的网关。大多数移动电话提供者将功能都放在主页

上,在上面可以通过 WAP 设备操作。网关的链接一般叫做“Go to URL”。当选择以后,WAP 设备将通过网

关操作指定的普通 IP 或者 URL。在这种情况下,网关读取从 WAP 设备发送给网关的 WML 内容,就像 PC

浏 览 器 读 取 内 容 的 过 程 一 样 。

有些营运商选择不让他们的用户操作其他的站点。这个就像 Internet Service Provider 只允许用户操作 ISP

自己的站点。像这样的做法是不明智的,这样会发现自己的用户去其他地方了。

如果要坚持这种方法,可以通过 ISP 拨号或者使用一个公共的网关来取得其他的 WAP 资源。

25. 有没有一个 友好的方 式来管理 WML 内容?

还没有。虽然 Oracale 正在开发数据库驱动的文档服务,被称为 Panama,可以支持 WAP 分发。

26. 如何防止用 户代理 cache 页面?

如果用户使用 ASP,应该加入一行<%Response.expires=-1%> ,这个将阻止 Cache。

27. 怎样防止从 Cache 中读取 WML 页面?

当 WML 页面下载到 WAP 设备后,它将保存在 WAP 设备内存中一段时间,直到这个时间过期。在这之

后 , 页 面 将 从 服 务 器 下 载 , 而 不 是 从 WAP 设 备 的 缓 存 读 取 。 这 个 过 程 被 称 做 Cache 。

但是有些时候不想让页面从缓存中读取,而是从服务器端读取。一个典型的例子就是当服务器的内容不

断在更新的时候,通过在 HTTP 头中加入一定的 cache 信息,来告诉 WAP 设备该页面将不存储在缓存中。

可以在服务器端生成 HTTP 头,或者使用 PHP、ASP、Perl 或者其他服务端开发语言。这一行不能被包括

在 页 面 里 , 既 然 是 HTTP 的 信 息 头 , 就 不 是 WML 元 素 。

对于静态页面,或许没有使用服务器端脚本语言,许多浏览器支持 META 标签来控制浏览器的 Cache。

看 本 部 分 的 最 后 的 例 子 。

将下面代码加入到 HTTP 头中,页面将马上过期:

Expires: Mon, 26 Jul 1997 05:00:00 GMT

Last-Modified: DD. month YYYY HH:MM:SS GMT

Cache-Control: no-cache, must-revalidate

Pragma: no-cache

第一行告诉微型浏览器,页面已经过期一段时间了。第二行告诉浏览器页面最后一次修改的时间。DD 应

该换成当天的日期,month YY HH MM SS 等等类推。第三行和第四行有同样的效果。告诉浏览器页面不被

第 31 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

Cache ( 第 三 行 适 用 于 HTTP 1.1 , 第 四 行 适 用 于 HTTP 1.0 ) 。

下面的是 PHP 的一个例子:

<?

// set the correct MIME type

        header("Content-type: text/vnd.wap.wml");

// expires in the past

        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// Last modified, right now

        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  

// Prevent caching, HTTP/1.1

        header("Cache-Control: no-cache, must-revalidate");

// Prevent caching, HTTP/1.0

        header("Pragma: no-cache");

   ?>

下面是使用 WebClasses(VB)的例子。使用"Response.Expires=-1",防止 Cache。

  Private Sub WebClass_Start()

          'Set correct MIME type

          Response.ContentType = "text/vnd.wap.wml"

         

          'Make sure no caching

          Response.Expires = -1

          Response.AddHeader "Pragma", "no-cache"

          Response.AddHeader "Cache-Control", "no-cache, must-revalidate"

     

          'Use basicwml(my own) as template

          Set NextItem = basicwml

  End Sub 

这里有一个 ASP 的例子,同样使用“Response.Expires=-1”防止 Cache。

<%

      Response.ContentType = "text/vnd.wap.wml"

第 32 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

      Response.Expires = -1

      Response.AddHeader "Pragma", "no-cache"

      Response.AddHeader "Cache-Control", "no-cache, must-revalidate"

%> 

最后是使用 META 的例子:

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

  <wml>

      <head>

          <meta forua="true" http-equiv="Cache-Control" content="max-age=0"/>

      </head>

      <card id="alwaysexpire">

          <p>This deck will never be stored in the cache</p>

      </card>

  </wml>

下面的页面是在经过 86400 秒(24 hours)后过期。

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

  <wml>

      <head>

          <meta forua="true" http-equiv="Cache-Control" content="max-age=86400"/>

      </head>

      <card id="expire1day">

          <p>This card will live in the cache for a day</p>

      </card>

  </wml>

有些浏览器例如:UP.Simulator 如果可以通过“返回”达到另外一个卡片,那么它将不会重新装载卡片。

第 33 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

为了强制这个更新动作,用户必须在 META 标签中使用 must-revalidate 参数。

<meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>

28. 如何防止变 量被保存 在 Cache 中?

变量保存在 Cache 中,这样变量还可以再利用。例如当用户返回到上一个输入卡片,他不需要重新输入,

只需要改变需要改变的地方。但是在某些情况下这会造成一些问题。例如以 WAP 聊天系统,有些变量用了

一遍又一遍,但是需要不同的内容。有些浏览器,例如:Nokia 7110,就会存在类似的在该清除的时候无

法 清 除 的 问 题 。

在 WML 中 , <card> 标 签 有 一 个 参 数 叫 做 newcontext 。

当 newcontext="true" 时清除所有的变量。但是这样也清除了所有导航的历史记录,这意味着 back 按钮

不 再 工 作 。

为了清除变量,可以告诉浏览器将变量设为空:

<setvar name="one_variable" value=""/>

<setvar name="another_variable" value=""/>

但是,不是每个时候都有效果。在某些情况下必须使用一个难以想象的方法来清空变量。就是使用

onenterforward 事件。

<onevent type="onenterforward">

    <refresh>

        <setvar name="one_variable" value=""/>

        <setvar name="another_variable" value=""/>

    </refresh>

</onevent>

29. 怎么能够知 道请求是 从 WML 浏览器 来的还是 HTML 浏览器来的 ?

既然要利用已经存在的为 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.

第 34 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

// 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


第 35 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

$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” 来 代 替 是 可 行 的 做 法 , 也 是 足 够 的 。

第 36 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

同样的功能也可以通过 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%>

30. 如何判断访 问者是来 自哪个浏 览器或者 移动电话 ?

可以通过检查 HTTP_USER_AGENT 标签来判断。例如试着使用 Microsoft Internet Explorer 访问一个站点

的时候,HTTP_USER_AGENT 将返回:Mozilla/4.0 (compatible ;MSIE 5.0; Windows 98);在同样的

第 37 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

情况下使用 Nokia 7110 访问这个站点,HTTP_USER_AGENT 就会是:Nokia7110/1.0(04.73)。据此可以

判断用户代理是什么类型的。

31. 可以得到用 户代理的 电话号码 吗?

不可以,除非网关支持这个特点,WAP 没有办法知道用户的电话号码。

32. 可以通过 WML 使得可以用 WAP 设备进 行拨号吗 ?

WAP 的电话功能可以使用 Wireless Telephony Application Interface(WTAI)。

例如:

WMLScript: WTAPublic.MakeCall("9287787"); 

但是第一代的 WAP 设备不支持这个功能。

33. 能够从 WAP 设备中读取 数据吗, 例如:电 话号码?

这里有一些通过 HTTP 的信息,但是十分有限。既然只有网关发送过来少量的信息,像 WAP 设备的号

码 可 能 无 法 读 取 。 同 时 , 在 某 些 国 家 这 还 涉 及 到 个 人 隐 私 的 问 题 。

基本上丢弃的内容就是 WAP 网关传送给 HTTP 服务器的内容。这不同于 WAP 网关到网关。Phone.com 的

UP.Link 网关是一个最好的例子。因为它在 HTTP 头中返回一个字符串叫做 UP_X_SUBNO,里面包含了电

话 号 码 。 Ericsson 网 关 将 传 送 一 个 辨 别 设 备 用 的 字 符 串 , 但 是 在 明 文 中 没 有 电 话 号 码 。

每 次 WAP 设 备 向 HTTP 服 务 器 请 求 一 个 URL , WAP 网 关 就 会 将 信 息 传 送 给 HTTP 服 务 器 。

以 下 的 PHP 脚 本 显 示 了 从 网 关 过 来 的 所 有 HTTP 头 的 信 息 。 可 以 使 用 WML 浏 览 器 进 行 测 试 。

(http://wap.colorline.no/clientinfo.html) 。 其 他 的 例 子 也 可 以 在 下 面 的 UTL 中 找 到 :

http://wap.colorline.no/demos.html

第一个部分是取得所有的标准 HTTP 头信息。第二个部分是提取一个内容。

<?

  header("Content-type: text/vnd.wap.wml");

  echo("<?xml version=\"1.0\"?>\n");

echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

\"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n");

  echo("<!—Code written in Microsoft NOTEPAD.EXE à \n");

?>

第 38 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<wml>

  <card id="init" title="Client Info">

      <p>

          <?

              // First part – standard HTTP stuff

              $headers = getallheaders();

              while (list($header, $value) = each($headers)) {

                  echo strtoupper($header). ": ". $value. "<br/>\n";              

              }

        // Second part

// IP address of the client side

              echo("REMOTE_ADDR: ".$REMOTE_ADDR. "<br/>\n");

// Port at the client side

              echo("REMOTE_PORT: ".$REMOTE_PORT. "<br/>\n");

// Name of authenticated user

              echo("REMOTE_USER: ".$REMOTE_USER. "<br/>\n");

// Gateway Interface type

              echo("GATEWAY_INTERFACE: ".$GATEWAY_INTERFACE. "<br/>\n");

// Protocol used by the server

              echo("SERVER_PROTOCOL: ".$SERVER_PROTOCOL. "<br/>\n");

// Request Method

              echo("REQUEST_METHOD: ".$REQUEST_METHOD. "<br/>\n");

// Connection type

              echo("HTTP_CONNECTION: ".$HTTP_CONNECTION. "<br/>\n");

// Host it connected via (proxy)

              echo("HTTP_VIA: ".$HTTP_VIA. "<br/>\n");

          ?>

      </p>

  </card>

第 39 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

</wml> 

Henrik Gemal (gemal@dk.net)也有一个在线的基于 WML 的工具 BrowserSpy,来显示更多关于 HTTP

头的信息、服务器环境和用户的浏览器等等。有关这个工具的详细情况可以浏览 http://wap.gemal.dk/

Werner Forkel 提交 了一 个 Perl 的脚 本, 可以 显示 电话 号码 (如 果有 )。 可以 在以 下位 置测 试:

http://wap.colorline.no/wap-faq/apps/subnotest.wml , 同 样 也 收 集 在 : http://wap.colorline.no/demos.html.

这些程序只适合某个网关。如果要测试其他的网关,可能就显示不出电话号码。因此电话号码不能作为

ID 号来处理。至少因为不是一个全球的标准。

34. 有没有办法 连接到电 话号码?

在某些情况下,当在显示了一连串的号码之后,需要中断功能连接到一个电话号码上并拨号。例如:执

行 一 个 dial:12345678 就 非 常 像 mailto: 标 签 。

越来越多的浏览器都支持这个功能,但还不是所有。Phone.com, Mitsubishi 和 Ericsson 已经在浏览器中

集成了这个基于 Wireless Telephony Interface specifications (WTAI)的功能。 WTAI 将允许以下的 URL 将

关闭连接并且拨号:

  <go href="wtai://wp/mc;+4712345678">Make a call to +47-12345678</go> 

Nokia 7110 已经有个功能叫做“Use Number”。它可以通过 WML 卡片查找一个类似于电话号码的列表,

然后用户可以选择进行呼叫。注意用户必须分离这些数字以便它能正常工作。

35. 使用 GET 或者 POST 方式能传送 多少字符 ?

使用 GET 或者 POST 方式所能传送的字符数目,不同的设备有不同的限制。一个 GET 通过 UTL 传送变

量,能传送的数据总量比使用 POST 方式所能传送的数据要小。例如,Nokia 7110 似乎对每个 GET 限制

在 512 个字节左右,但是 POST 最大可以达到一个编译后卡片的大小(约 1300 字节)。 UP.SDK 4.0 将

GET 请 求 限 制 在 970 左 右 , 最 大 可 以 达 到 一 个 编 译 后 卡 片 的 大 小 。

显然,卡片有时候保存了要发送给服务器的参数的内容,既然编译后的卡片大小有限制,那么肯定要

影 响 到 整 个 所 能 传 输 的 数 据 。

在 POST 和 GET 之间没有太多的区别。比如这个没有很好地使用 GET 的例子。

<input type="text" name="var1" format="*N"/>

    <p>

        <anchor>Send it

        <go href="somescript.cgi?variable=$(var1)" method="get"/>

        </anchor>
第 40 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

   </p>

下面仍然是一个使用 GET 的请求,但是使用了<postfield>来传送参数。这个代码就漂亮多了。既然可以

定义为 GET,同样也很容易转成 POST。

<input type="text" name="var1" format="*N"/>

    <p>

        <anchor>Send it

        <go href="somescript.cgi" method="get">

            <postfield name="variable" value="$(var1)"/>

        </go>

        </anchor>

   </p>

直接改为 POST:

<input type="text" name="var1" format="*N"/>

    <p>

        <anchor>Send it

        <go href="somescript.cgi" method="post">

            <postfield name="variable" value="$(var1)"/>

        </go>

        </anchor>

   </p>

最好是做测试找到到底能传输多少数据。这里有个测试程序:

http://wap.colorline.no/wap-faq/apps/putsize.php3。

这 个 程 序 也 可 以 在 下 面 的 URL 中 找 到 : http://wap.colorline.no/demos.html 。

该程序将产生一个卡片包含一个变量,里面包含了一定数量的字符 X。用户可以选择传输是使用 GET 还

是 POST 。 在 传 输 之 后 , 脚 本 将 要 显 示 接 收 到 的 字 符 个 数 。

脚本生成一个页面来测试使用 GET 或者 POST 方式到底能发送多少个字符:

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

第 41 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<wml>

  <head>

  <meta forua="true" http-equiv="Cache-Control" content="max-age=0"/>

  <meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>

  </head>

  <card>

  <do type="prev" label="Back">

  <go href="putsize.php3"/>

  </do>

  <p>

  <anchor>GET data

  <go method="get" href="putsize.php3">

  <postfield name=\"a\"

value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

  </go>

  </anchor>

  </p>

  </card>

</wml>

36. 如何同 HTML 站点一 样 POST/ CGI,返回 表单数据 到服务器 ?

如果使用:

<go method="post" href="mycgi.cgi"> 

并且使用:

<postfield name="fieldname" value="$NameOfInputField"/> 

就可以 POST 数据给 CGI 程序了。

37. POST 无法工 作是怎么 回事?

有很多说 POST 参数将会丢失的流言,特别是在 Nokia 7110。就笔者所知,还没有哪个 Nokia 7110 有这

样 的 问 题 。 这 个 问 题 主 要 是 存 在 于 网 关 或 接 收 方 。

第 42 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

测试显示 Nokia SDK 2.18 ,当使用内建网关的时候,使用 POST 会出现问题。甚至当 method 设置成

“ POST” 的 时 候 , 服 务 器 那 边 还 是 将 POST 请 求 作 为 GET 。

当 使 用 POST 的 URL 时 , Nokia SDK 将 会 崩 溃 。 在 某 些 情 况 下 URL 的 最 后 的 字 符 将 被 删 除 。

POST Test 页面将简单的 POST 的两个变量叫做“var1”和“var2”来显示整个变量的内容和 HTTP 头的内

容。如果不能看到正确的变量内容,肯定有问题。检查 HTTP 头中的 application/x-www-form-urlencoded(注

意 ! 需 要 在 变 量 中 输 入 一 些 内 容 ) 。

这个方法解决了 Nokia SDK 2.18 的问题,可以把它配置到任意的公共网关来测试。笔者推荐使用

wapHQ 网 关 。

在其他的情况下,POST 确实不工作,问题可能是 HTTP 头在服务器端解释的时候有问题。脚本语言,

例如:ASP、Java 或是 CGI 等等都是通过查看在 HTTP 头中的 application/x-www-form-urlencoded 完全匹配

的字符串。在某些情况下字符串可能有附加的数据,例如:charset="utf8" 。既然服务器端不是精确的匹配,

它 就 不 会 查 看 HTTP 头 , 因 此 POST 就 变 量 丢 失 了 。

注 意 这 不 是 浏 览 器 的 问 题 , 在 HTTP 头 加 入 字 符 集 描 述 , 将 造 成 脚 本 语 言 方 面 的 错 误 。

为了检测有关网关或浏览器的问题,仍使用上面的 POST Test 页面来测试。同样查看 application/x-www-

form-urlencoded 的输出,检查有没有附加的字符在结尾部分,如果有,那么这就是服务器端的问题。

解决这个问题的方案很复杂,它随用户使用的脚本描述语言不同而不同,而且需要操作原代码。简单地

说 , 解 决 方 案 就 是 需 要 人 工 读 取 HTTP 头 , 不 要 使 用 脚 本 语 言 已 经 写 好 的 读 取 方 式 。

这里有一个用 ASP 编写的解决方法。它显示了如何在 POST 中抓取数据。用户需要从二进制数据中发现

需要的变量。

Dim lngToalByteCount

Dim vntRequestData

  lngTotalByteCount = Request.TotalBytes

  vntRequestData = Request.BinaryRead(lngTotalByteCount)

全部的代码,就应该像下面的代码:

<%@ Language=VBScript %>

<%

  Dim Temp, i, sPost, sWMLDeck

  'Converts the binary data to a string.


第 43 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

  For i = 1 To Request.TotalBytes

      Temp = Request.BinaryRead(1)

      sPost = sPost & Chr(AscB(Temp))

  Next

  'Parses out the values of the POSTED variables (in this

  'example myvar1 and myvar2).

  Dim sVar1, sVar2

  sVar1 = getVar("myvar1", sPost)

  sVar2 = getVar("myvar2", sPost)

  'Writes the WML Deck displaying the POSTED Variables

  sWMLDeck = "<?xml version=""1.0""?>" & vbCrLf

  sWMLDeck = sWMLDeck & "<!DOCTYPE wml PUBLIC ""-//WAPFORUM//DTD WML 1.1//EN"" "

  sWMLDeck = sWMLDeck & """http://www.wapforum.org/DTD/wml_1.1.xml"">" & vbCrLf

  sWMLDeck = sWMLDeck & vbCrLf & "<wml>" & vbCrLf & vbTab

  sWMLDeck = sWMLDeck & "<card id=""main"" title=""POST TEST"">" & vbCrLf

  sWMLDeck = sWMLDeck & vbTab & vbTab & "<p>" & vbCrLf

  sWMLDeck = sWMLDeck & vbTab & vbTab & vbTab & "myVar1: " & sVar1 & "<br/>" & vbCrLf

  sWMLDeck = sWMLDeck & vbTab & vbTab & vbTab & "myVar2: " & sVar2 & vbCrLf

  sWMLDeck = sWMLDeck & vbTab & vbTab & "</p>" & vbCrLf & vbTab

  sWMLDeck = sWMLDeck & "</card>" & vbCrLf & ">/wml>"

  Response.ContentType = "text/vnd.wap.wml"

  Response.Write(sWMLDeck)

  'Quick function for picking out the values of the POSTed variables.

  'sKey is the variable name, sRaw is the POST string.

  Private Function getVar(sKey, sRaw)

  Dim sRetVal

If InStr(sRaw, sKey) Then


第 44 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

sRetVal = Mid(sRaw, InStr(sRaw, sKey) + Len(sKey) + 1)

If InStr(sRetVal, "&") Then

sRetVal = Mid(sRetVal, 1, InStr(sRetVal, "&") - 1)

End If

End If

getVar = sRetVal

  End Function

%>

38. 为什么 META 标签不 工作?

浏览器不支持默认的 meta 标签,例如:

<meta http-equiv="refresh" content="1;http://somewhere.com/"> 

虽然有少量网关支持非常有限的 META 标记。但是测试显示,如果使用了它们,网关就会出问题。例如

某网关不支持普通的 HTTP Cache 控制,如果要实现 Cache 控制只好使用特殊的 META 标记。显然从其他

网关来的用户就可能不支持这个 META。注意:不要使用 META tags。肯定有其他的方式来完成你的想法。

最常使用的 META 是:

<meta http-equiv="refresh" content="1;http://somewhere.com/"> 

这个告诉浏览器重新装入指定的 WML 页面。WML 中已经包含了一个<ontimer>。

39. 为什么服务 器接收不 到用户发 送的参数 ?

用户输入的参数或者其他参数可以像在 HTML 中一样通过提交方式发送到服务器。在 HTML 中这个是

<FORM> , POST 或 者 GET 。

首先知道要知道 POST 和 GET 的区别。对于 POST 浏览器将生成一个数据包将变量名和它们的内容捆绑

在一起,并发送到服务器。对于 GET ,它其实是一个 URL 请求,变量名和内容都包含在 URL 中。

对于 WAP 环境,要求是非常严格的,必须要根据协议来操作。虽然以下的 URL

"/cgi-bin/somescript?username=john&telephone=123-123-1234&occupation=banana+bender"

可以在 HTML 环境中工作,但是在 WAP 环境中无法工作。以上的部分编码将使得保护的变量内容被误

解。特殊的空格(在 banana 和 bender ) 被 转 成 “ +” 。 URL 就 根 本 没 有 空 格 。

以上的 URL 在 WAP 中无法工作的主要原因是用来分割每个变量和变量内容的 & (与号)没有转义。

第 45 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

正确的格式应该是:

"/cgi-bin/somescript?username=john&amp;telephone=123-123-1234&amp;occupation=banana+bender"

在这里 & 被名字实体所替换。为了解释更清楚些,请看下面的代码:

<card id="input" title="Gimme some data">

  <p><input type="text" name="username" format="M*m"/></p>

  <p><input type="text" name="occupation" format="M*m"/></p>

<p>

<anchor>Send this

<go href="/cgi-bin/somescript?username=$(username)

&amp;occupation=$(occupation)"/>

</anchor>

</p>

注意这不是真正的 WAP 协议,专门的字符应该转义,否则将得到不可预料的结果。

40. 为什么在 HTTP 中的 Referer 看不见 ?

当 HTML 浏览器从一个 URL 到另外一个 URL 的时候,它默认地会发送一个叫做 Referer 的 HTTP 头

给服务器,告诉它在浏览这个页面之前的那个页面。这是一个非常有用的特点,在 WAP 环境中同样也有。

但是既然这个信息来自用户代理(浏览器)、 WAP 设备,通常为了节约带宽和时间,就被省略了。

为了使用 Referer ,应该使用新的 URL 标签例如: <a>,<go>等等,并且加入参数:sendreferer。

<go href="/somedir/somedeck.wml" sendreferer="true"/> 

这样就会把参考的 URL 发送到服务器。

41. 如果没有找 到 URL,有可能重 新将用户 引导到另 外一个 WML 卡片或者页 面吗?

是的。但这是服务器端的特点,与客户端没有关系。

42. 为什么普通 的 HTTP 302 重新导 向不好使 ?

这的确是一个事实。核心的问题是在服务端的脚本语言,而不是在服务端语言和服务器之间。

所谓的 302 Found HTTP 反应是指服务器告诉用户代理,它所需要的资源在另外的地方可以找到。302 反

应可能包括一个人们可理解的信息,如果在这种情况下“ Content-type: ”就被设置了。笔者所测试过的服

务器,即使没有内容也都加了“Content-type:”。默认的 “Content-type:” 是 text/html。当然有些网关不喜欢

第 46 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

这 个 类 型 。

以下的例子已经经过测试,在 Apache 和 Microsoft Internet Information Server 都可以工作。如果使用其他

的 Web Server,或者其他的脚本语言,需要能转换这些简单的脚本。关键的工作是十分简单的,除非需要,

不用告诉服务器整个 HTTP 头。大多数 Web Server 将自动完成这个 HTTP 头,使得用户代理可以理解。

所有的代码例子可以在线测试。如果它们能够工作,用户将被重新引导到

http://wap.colorline.no/clientinfo.html , 在 那 儿 将 产 生 一 个 WML 页 面 来 显 示 所 有 的 HTTP 头 。

PHP 代码测试可以在 http://wap.colorline.no/wap-faq/apps/302test.php3 中找到。

<?

      header("Location: http://wap.colorline.no/clientinfo.html");

      header("Content-type: text/vnd.wap.wml";

?> 

Perl 测试代码可以在 http://wap.colorline.no/cgi-bin/302test.pl 中找到。 

print "Location: http://wap.colorline.no/clientinfo.html\n";

print "Content-type: text/vnd.wap.wml\n"; 

ASP 测试代码可以在 http://www.colorline.no/302test.asp 中找到。 (注意不同的 URL): 

<%

      Response.Redirect = "http://wap.colorline.no/clientinfo.html";

      Response.ContentType = "text/vnd.wap.wml";

      Response.Flush

      Response.End

%>

43. 可能在 WML 中实现 ASP Session 吗?

不可能。可以把信息存储在临时变量中模拟 Session。Session 是保存在用户 PC 上的“cookies”中。目前的

WAP 设备不支持“cookies”。不过下一代的设备和 WML 可能支持“cookies”。

44. WAP 支持 Session 吗?

在 HTML 中,一个十分普遍的“处理”用户的方法就是为每个用户分配一个“ session”。这个有时候是

通过指定一个独一无二的 cookies 来实现的。然而 WAP 的资源非常有限,因此 session 的处理必须以不同的

方 式 来 处 理 。

Alex Kriegel 提供了一个安装在 WAPlinks 的 Custom Session Object 包。这个 zip 文件中包含了 VB 类的文

第 47 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

件和编译过的 Dll 文件,还有相关的文档。这些可以在 http://www.waplinks.com/customsessionobject.zip 下载。

另 外 一 种 方 法 是 使 用 PHPlib , 它 是 使 用 PHP 编 写 的 。

Tarique (tarique@nagpur.dot.net.in) 提供了如何使用 PHPlib 来验证和处理每个 WAP 用户。有相关的文件

和注释可以到下面地址下载:

http://wap.colorline.no/wap-faq/archive/phplib_wml.zip

45. 可以在 WAP 中使用 Cookies 吗?

在理论上是可以的,但不是所有的 WAP 设备都支持。另一个方法来管理会话是使用隐藏的 fields(包含

会话标识,无论是 POST 或者 GET 方式)。

46. WAP 支持 Cookies 吗?

普通的 HTTP Cookies 是作为 WAP 的扩展来实现的。无论你以前听到什么,Cookies 的支持将越来越好。

实 际 上 Phone.com 的 UP.Link 网 关 已 经 支 持 这 个 功 能 有 一 段 时 间 了 。

可 以 使 用 以 下 的 脚 本 语 言 检 测 Cookie-support , :

http://wap.colorline.no/wap-faq/apps/cookietest.php3

脚 本 在 http://wap.colorline.no/demos.html 也 可 以 得 到 。

当第一次看见卡片的时候,记数器应该为 0。所有的 Cache 都被关闭。卡片通过在 URL 中随机地加入变

量来强制自己加载(笔者不推荐这种强制加载办法)。当点击增加计数连接,页面将重新加载,卡片就再

次 出 现 , 并 且 记 数 器 变 成 1 。

在脚本中,Cookie 的名字被称做 TestCookie,它有很长的生命期,因此可以隔好几天再来查看记数器 ,

它将是上一次的数值。这要求你能使用与上一次访问所使用的 WAP 环境一样,否则将把你的数值清 0。

如果记数装置一直都是 0,那么 cookie 就没有能传送到你的 Web Server。这个脚本也能表示 Cookie 是否

被 传 送 。

另外,这个脚本同样还显示 HTTP 头中的 HTTP_VIA 和 HTTP_USER_AGENT 。这些能够得到所使用的

网关和模式。一些网关使用 HTTP_VIS 标识自己,而另外一些使用 HTTP_USER_AGENT,还有一些则让

程 序 无 法 知 道 。

下面是它的 PHP 代码。一个标准的 PHP setcookie() 函数只有在这种脚本语言中才会出现。函数只是简单

地设置 cookie,并且 PHP 变量 $HTTP_COOKIE_VARS 用来读取 cookie。

<?

if(isset($HTTP_COOKIE_VARS["TestCookie"]))

第 48 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

{// Check if TestCookie is set

      $cookieset = "set";

// Read the Cookie

          $cookieid = $HTTP_COOKIE_VARS["TestCookie"];

    // and increase its value

          $cookieid++;

        }

      else {

    // cookie was not set

          $cookieset = "not set";

    // start counter at zero

          $cookieid = 0;

      }

    // apply the Cookie to the HTTP header

  setcookie("TestCookie",$cookieid);

    // set the content type for WML

    header("Content-type: text/vnd.wap.wml");

// disable ALL caching

      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

      header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

      header("Cache-Control: no-cache, must-revalidate");                    

      header("Pragma: no-cache");

      echo("<?xml version=\"1.0\"?>\n");

  echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

  \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n");

echo("<!-- This application attempts to test the capabilities of a WAP gateway to support cookies -->\n");

      echo("<!-- App by Espen.Lyngaas@colorline.no (c) 2000 -->\n");

    // Generate random value for reload forcing

      $random = mt_rand(100000,999999);

第 49 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

  ?>

  <wml>

  <head>

// Even more cache disabling

<meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>  

  </head>

  <card id="init" title="CookieTest">

  <p>

    Cookie "TestCookie" was <?echo($cookieset)?>.

    Value is currently "<?echo($cookieid)?>"

  </p>

  <p>

<anchor>

Increase value

<go method="get" href="<?echo($PHP_SELF)?>?random=<?echo($random)?>"/>

</anchor>

</p>

<p>Gateway:  

  <?

      if(isset($HTTP_VIA))

{ // Is there something in the HTTP_VIA variable?

          echo($HTTP_VIA);

      }

      else {

          if(isset($HTTP_USER_AGENT))

{ // Is there something in the HTTP_USER_AGENT variable?

              echo($HTTP_USER_AGENT);

          }

          else {

// Absolutely no identifier was found

第 50 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

              echo("Unknown");

          }

      }

  ?>

  </p>

  </card>

  </wml>

47. 如何使用 WAP 设备发 送 E-Mail?

在 HTML 中有一个默认的 E-Mail 机制:“ mailto:” 。但在 WML 中不好使,因此 E-Mails 必须通过

WML 表单来解决。例如:

<wml>

        <card id="edit" title="Email Editor">

          <p>From: <input type="text" name="from" format="*M"/></p>

          <p>To: <input type="text" name="to" format="*M"/></p>

          <p>Subject: <input type="text" name="subject" format="*M"/></p>

          <p>Message body: <input type="text" name="body" format="*M"/></p>

          <p>

              <anchor>Send this mail

                  <go method="post" href="http://some.host/mailhandler"?action=send/">

                      <postfield name="from" value="$(from)"/>

                      <postfield name="to" value="$(to)"/>

                      <postfield name="subject" value="$(subject)"/>

                      <postfield name="body" value="$(body)"/>

                  </go>

            </anchor>

          </p>

    </card>

</wml> 

在代码中的 http://some.host/mailhandler 是一个 CGI 程序,它是服务端的脚本程序,将提交的表单转换

成 E-Mail 格 式 并 发 送 出 去 。

第 51 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

如果想使用一个类似于发信的过程,就需要编辑变量名。另外发送的数据是有限的,长信息可能需要打

断 。

为了演示它是如何工作的,下面的 PHP 脚本可以用来处理 Mail。它将格式化 WML 页面,告诉用户是

否发出信件。在真实的应用中,应该加入检测,例如:E-Mail 的合法格式。

<?

// Tell the client that this is a WML deck

      header("Content-type: text/vnd.wap.wml");

      echo("<?xml version=\"1.0\"?>\n");

      echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

\"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");

// The name of your mail server

      $mailer = "wap.colorline.no";

// Format the from field

      $from = $from." (WAP user at ".$mailer.")";

// Add the from field and some character handling to the extra headers

  $extraheaders = $from."\nContent-Type: text/plain;

charset=iso-8859-1\nContent-Transfer-Encoding: 8bit";

// Start sending out the WML deck

      echo("<wml>\n");

      if(mail($to,$subject,$body,$extraheaders))

{// Use PHP's internal mail functionality

// Mail was successfully sent

          echo("<card id=\"sent\" title=\"Mail sent\">\n");

          echo("<p>Mail was sent successfully</p>\n");

          echo("</card>\n");

      }

      else {

// The mail could not be sent

          echo("<card id=\"notsent\" title=\"Mail failed\">\n");  


第 52 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

          echo("<p>Unable to send mail</p>\n");

          echo("</card>\n");

      }

      echo("</wml>\n");

?>

因为安全性的原因,以上的代码没有演示程序。

48. 可以在模拟 器上操作 本地的页 面,却没 有办法访 问 Internet 上的,有什 么问题吗 ?

大多数模拟器和工具都可以浏览 Internet、Intranet 和本机的页面。但是在访问一些大公司页面的时候,必

须通过代理服务器来取得进入 Internet 的权限。如果必须通过这个代理服务器来取得 HTML 页面,那么你

的 WAP 模 拟 器 也 会 取 得 权 限 来 访 问 Internet 。

注意到有些模拟器不支持代理服务器,但是大多数是支持的。在模拟器里面设置这些是很简单的。用户

所 做 的 只 需 要 将 代 理 主 机 的 名 字 、 IP 地 址 和 端 口 号 输 入 就 可 以 了 。 如 果 没 有 找 到 , 你 可 以 在

systems/network 管 理 器 里 面 设 置 这 些 , 也 可 以 检 查 Netscape/IE 的 设 置 。

在某些情况下,代理服务器使用 userid 和 password 来取得进入 Internet 的权限。有些模拟器支持用户代

理 服 务 器 , 用 户 应 该 能 告 诉 模 拟 器 相 关 的 代 理 配 置 。

在极少的情况下,使用代理服务器(如 Microsoft Proxy Server,)的用户会遇到更多的问题。这个代理

服务器只接受一种验证方式(userid/password)。这种验证被称做 NTLM ,并且是某种 MS 的验证方式。

几乎很少有模拟器支持这种方式。因此最好是避免使用它,或者让管理员使用“ Basic Authentication”方式

以避免更多的麻烦。

49. 什么是 PUSHing,它是 如何工作 的?

PUSH 被加入到 WAP 1.2,而且只在 WAP 1.2 中才存在。简单地来说,PUSH 提供了另外一种从服务器向

用户发送数据的方式。 PULLing 是从客户端请求信息,然后接收它; PUSH 意味着服务器可以向用户发送

数 据 , 而 不 需 要 用 户 来 请 求 。

内容或者应用服务器无法向用户代理直接发送数据,必须使用一种叫做 Push Proxy 的网关。PPG 是基于

Internet 的 Push Initiator ( 内容或者应用服务器 ) 与移动用户之间的。在 Internet 一边,使用 Push Access

Protocol , 在 移 动 网 络 一 边 使 用 Push Over-the-Air Protocol 。

当前只有 WAP 1.2 开发平台支持 PUSH , 例如 Nokia Toolkit 2.0 。 Nokia Toolkit 2.0 only 内部支持

PUSHing ,意味着用户可以从工具包的界面将消息推送到模拟器。如果想试着到一个外部的 Push Proxy

Gateway, 工具包就崩溃了。从 readme 文件中知道,PUSHing 还没有经过完整的测试。

第 53 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

50. WAP 模拟器 说 text/html 不支持,但 是用户的 MIME 设置是正确 的,为什 么?

当使用服务端的脚本语言,例如 ASP 、 PHP 或者 Perl,来生成 WML 输出,或者从 HTTP 服务器提供

WML 页 面 的 时 候 。 记 住 HTTP 一 般 默 认 的 显 示 是 HTML , 其 MIME 类 型 是 text/html 。

如果 HTTP 服务器或者服务器脚本有错误,错误的信息将使用 HTML 显示,因此微型浏览器是不能显

示 错 误 信 息 的 。

一个开发工具/模拟器可以让用户看到从 HTTP 服务器过来的代码。例如,在 Nokia SDK 中,这个功能

被称做 View Source。通过看代码可以知道 HTTP 服务器到底发送了些什么内容。也可以使用普通的浏览器

来查看任何 HTML 格式的错误信息。

51. 在哪儿有 Visio 移动电 话的模板 库?

目前唯一知道的就是它包含在 Nokia 7110 中。

52. 有没有其他 有用的 WML 内容服务列 表?

这 里 至 少 有 一 个 。

对于 Unix 用户, http://pwot.co.uk/wml/ 中有 Thomas Neill ( ponder@pwot.co.uk )提供的 WML 工具,

包 括 WML 二 进 制 编 译 和 反 编 译 。

Angus 和 Zygo WAP(angus@z-y-g-o.com)已经开发出了一个 Perl 工具包。它还在为管道式的 WML 编

译器工作。

53. XML 到 XSL 的转换 可以应用 到 WML 和 WAP 吗?

既然 WML 实际上是 XML,并且 XSL 将 WML 转换成其他不同的 XML 文档,那么问题的答案是显然

的:XSL 也可以应用到 WML。可以参考 Luca Passani 的文章《WebTechniques》。这个文章在网络上的地址 是:

http://www.webtechniques.com/archives/2000/03/passani/

它推荐看一下叫做《在 Apache 下 Cocoon 计划的实现》这篇文章。“Cocoon 是一个依赖于新的 W3C 技术

(例如 DOM,XML,和 XSL)框架。Cocoon 计划在于改变 Wen 信息创建,生成和提供的方式。文档内容、

风格和逻辑经常因为个人或者工作组的不同而不同。 Cocoon 目标在于将这三层分离,允许三层次之间进

行独立的设计,创建和管理,减少相互之间的影响,增加工作的可复用性以及缩短上市的时间。Web 内容

的产生大多数是基于 HTML 的,但是 HTML 并不能将三者分离开来,混合着各种格式标签,程序逻辑等

等。而 Cocoon 计划将要改变这种情况,允许内容,逻辑和风格相互分离。使用 XML 来保存,但是使用

XSL 来 将 它 们 混 合 。 ”

第 54 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

基本上来说,Cocoon 将解读 HTTP 头,判断使用的是什么浏览器,然后使用不同的风格来选择正确的

页面,使用 XSL 进行混合。

54. 想让用户只 要简单地 按下一个 按钮就能 够转跳到 其他卡片 而不是通 过选择 URL,这个 可能吗 ?

不,不可能。

55. 如何避免一 个行的中 断以便可 以在一行 中输入多 个链接?

在 Nokia 7110 中,不可能做到这一点,每个链接都占据自己的一行。

四、 关于 WMLScript 的常见 问答

1. 简单地 说什么是 WMLScript?

WMLScript 是一种在客户端运行的脚本语言。它是基于 ECMAScript 的。WMLScript 和 Javascript 非常相

像,只是在功能上没有 Javascript 丰富。从更一般的方式来说,它是一个在客户端提供简单的应用程序,

而不是一个显示的操作程序。WMLScript 是一个经过优化,更利于 WAP 应用的程序。

2. 可以将 WMLScript 嵌入到 WML 页面中 吗?

不行。不像将 JavaScript 嵌入到 HTML 中,WMLScript 必须包含在一个独立的文件中。然后由 WML 调用。

3. 为什么 一些 Mitsubishi browsers( Trium)不能 运行 WMLScript?

Mitsubishi Trium 能够运行 WMLScript,但是浏览器有一个设置允许关闭 WMLScript 的运行。像其他的

HTML 浏 览 器 一 样 , 可 以 关 闭 Java 或 者 JavaScript 的 运 行 。

当然这里会有一个毛病,即使它不能运行 WMLScript,它还能接受 WMLScritpt。

4. 在哪儿 能学到 WMLScript?

WMLScript.com 的 站 点 包 含 很 多 WMLScript 的 信 息 , 甚 至 WMLScript library 。

在 Phone.com's Developer 站 点 注 册 之 后 , 可 以 得 到 很 好 的 WMLScript 版 本 :

http://updev.phone.com/dev/ts/beta/docs/wmlscript/

五、 关于 WBMP 的常见 问答

1. 如何创 建 WBMP?

第 55 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

RCP 分发系统有 Adobe Photoshop 5.x 和 PaintShop Pro 的插件支持 WBMP 格式。GINGCO 和 Teraflops 提

供转换的工具。

2. 哪种格 式的图像 可以放送 到 WAP 终端?

WAP 标准规定的 BMP 格式 WBMP。WBMP Type 0 是一个简单的黑白,非压缩的 BMP 格式。细节可以参

考 :

http://www1.wapforum.org/tech/terms.asp?doc=SPEC-WAESpec-19990524.pdf

如果某个 WAP 设备可以支持任何图像格式,那么 WBMP Type 0 是最小的要求。

3. 有 GIF/JPEG 到 WBMP 的转换器吗 ?

有。在 http://www.imagemagick.org。在 http://www.rcp.co.uk 同样有一个 Adobe photoshop 的插件。

4. 有没有 实时转换 GIF 到 WBMP 的工具 ?

可 以 试 试 :

NetPBM : ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/

PBMtoWBMP:http://www.looplab.com/WAP/tools/

5. 可以在 WAP 页面中 混合声音 和文本吗 ?

不。很长一段时间内不会。这是因为电话的内存有限。但是你可以试一试 Palm 或者 Windows CE 的手持

设备。

6. 有一个 WBMP 图片在 Nokia Toolkit 上能正 常运行, 但是在 Nokia 7110 上却不能是 为什么?

检查一下 WML 代码。确定 IMG 标签没有高度和宽度属性,这通常导致错误。另外一个原因是图像可能

太大,造成当前的页面超过 1400 字节。

7. 当使用 WBMP 作为超链接 等时,在 7110 模拟器上不 工作,为 什么?

7110 不支持图像作为链接。

8. WAP 设备可以使 用图形而 不是文本 吗?

WAP 协议允许使用一种叫做 WBMP 的图形标准,它是一个位(黑或者白)的 BMP 版本。因此,所有的

图 形 , 为 了 适 合 这 个 协 议 , 必 须 转 换 成 WBMP 。

在使用 WBMP 的时候当然有很多限制,图像的大小不能超过 150 x 150 像素。这是因为 WAP 设备的屏

幕都非常有限。例如 Nokia 7110 屏幕是 96 像素宽,65 像素高。因此 150 x 150 像素看起来就特别大,占据

了 整 个 屏 幕 。 另 外 受 WAP 电 话 的 内 存 限 制 , 图 像 的 大 小 不 能 超 过 1461 字 节 。

第 56 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

因为不是所有的 WAP 设备都能显示图像。因此,<img>中的“alt”必须使用,这样才能适用于那些不能

显 示 图 像 的 WAP 设 备 。

“WAP Tiger” 是一个非常简单的命令行 BMP 转换工具,可以去 http://wap.infotiger.de/download.html 下载。

有 MS-DOS/Windows 和 Linux 版 本 。

可 以 在 http://www.rcp.co.uk/distributed/Downloads 找 到 免 费 的 Photoshop/Paint Shop Pro 插 件 。

Macromedia 有 一 个 为 Fireworks 的 外 接 插 件 可 以 让 用 户 输 出 WBMPs 。 PC 版 本 在 :

http://download.macromedia.com/pub/fireworks/xtras/wbmp_im_ex.exe

Mac 版 本 在 :

http://download.macromedia.com/pub/fireworks/xtras/wbmp_im_ex.hqx

WebCab.de 有 一 个 非 常 漂 亮 的 在 线 WBMP 编 辑 器 :

http://webcab.de/woe.htm

它能让你通过手工草稿生成、上传并编辑 WBMP。如果只有服务器端的脚本语言程序,但是无法产生动

态 的 WBMP , 这 是 唯 一 的 选 择 。

在 http://www.gingco.de/wap/有一个免费的 PIC2WBMP “独立”转换器。但是这个应用需要 Java 运行环境。

因 此 如 果 是 个 新 手 的 话 , 最 好 是 下 载 Paint Shop Pro 插 件 和 最 新 的 Paint Shop Pro , 网 址 是 :

http://www.jasc.com/download.html

Paint Shop Pro 对 于 没 有 注 册 的 用 户 来 说 是 有 时 间 限 制 的 SW 。 注 册 费 用 是 $99 USD 。

Surerange Analysis Ltd 有一个免费的产品叫做 ImageConvert Developer。它是一个单线程的 ActiveX 控件,

可 以 将 GIF 和 JPEG 转 换 成 WBMP 。 它 同 样 有 一 个 VC6 的 例 子 来 说 明 如 何 使 用 。

Applepie Solutions 提 供 一 个 在 线 的 , 基 于 WEB 的 GIF 到 WBMP 的 转 换 :

http://www.applepiesolutions.com/image2.wbmp/

如 果 指 定 用 户 想 转 换 的 文 件 的 URL 地 址 , 它 将 让 用 户 下 载 转 换 后 的 文 件 。

在 某 些 情 况 下 用 户 想 在 HTML 文 档 中 显 示 WBMP 。 为 了 达 到 这 个 目 的 , Andre de Leiradella

(leiradella@writeme.com ) 已经写了一个 Java 和 C 程序来从 WBMP 输出 GIF ,看起来就好像一个小的

LCD 显 示 器 。 C 版 本 可 以 作 为 CGI 。 应 用 程 序 可 以 到 下 面 的 位 置 找 到 :

http://members.xoom.com/leiradel/。

9. 如何实 现动画?

WBMP 图像不同于在 HTML 中广泛使用的 GIF 格式。它不支持动画。但是还是可以使用 WML 的

<ontimer> 标 签 来 创 建 一 个 。 请 注 意 这 种 方 式 不 是 能 达 到 想 象 中 效 果 的 。

通 过 研 究 Animated Images Demo 可 以 有 这 方 面 的 一 点 概 念 。 其 网 址 为 :


第 57 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

http://wap.colorline.no/demos.html

或 者 到 :

http://wap.colorline.no/wap-faq/apps/anim.html

当在执行这样的动画方式的时候,要记住微型浏览器的内存是有限制的。不可能将所有的图片都装入到

内存中。浏览器也不会装入那些过大的图片,因此某些动画可能在装入的时候就中断了。

演示程序:

<?xml version="1.0"?>

      <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN\"

    "http://www.wapforum.org/DTD/wml_1.1.xml">

    <!-- Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 2000 Color Line ASA -->

  <wml>

      <card id="image1" ontimer="#image2">

          <timer value="10"/>

          <p>

              <img src="anim1.wbmp" alt="Anim1"/>

          </p>

      </card>

      <card id="image2" ontimer="#image3">

          <timer value="10"/>

          <p>

              <img src="anim2.wbmp" alt="Anim2"/>

          </p>

      </card>

      <card id="image3" ontimer="#image4">

          <timer value="10"/>

          <p>

              <img src="anim3.wbmp" alt="Anim3"/>

          </p>

      </card>

      <card id="image4" ontimer="#end">

          <timer value="10"/>
第 58 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

          <p>

              <img src="anim4.wbmp" alt="Anim4"/>

          </p>

      </card>

      <card id="end" title="The End">

          <p>

                This is the end of the animation, but you can

                <anchor>run it again.

                    <go href="#image1">

                    </go>

                </anchor>

          </p>

      </card>

  </wml>

如果使用 PHP,可以看看更简单的程序:

<?

      header("Content-type: text/vnd.wap.wml");

      echo("<?xml version=\"1.0\"?>\n");

      echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

\"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n");

    echo("<!-- Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 1999 Color Line ASA -->\n");

  ?>

<wml>

  <?

      for($card=1;$card<5;$card++) {

          echo("<card id=\"image".$card."\" ontimer=\"#image".$card+1.">"\n");

          echo("<timer value=\"10\"/>\n");

          echo("<p>\n");

第 59 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

          echo("<img src=\"anim".$card.".wbmp\" alt=\"Anim".$card."\"/>\n");

          echo("</p>\n");

          echo("</card>\n");

      }

  ?>

  <card id="image5" title="The End">

  <p>

      This is the end of the animation, but you can

      <anchor>run it again.

          <go href="#image1">

          </go>

      </anchor>

  </p>

  </card>

  </wml>

10. 如果 WBMP 图片看 起来糟糕 极了,该 怎么办?

WBMP 只有两种颜色,要是图片漂亮需要一定的技巧。但是可以减少图片的颜色。这里有一个叫做

Floyd-Steinberg 的方法可以做到。这样的一个程序是 Jasc Paint Shop Pro。Paint Shop Pro 的价格不是很贵,

而且有直接保存为 WBMP 的插件。还可以使用 30 天免费版本。

11. 能够生成动 态的 WBMP 图像吗 ?

当然。可以使用 PHP、ASP 或者 Perl 来完成。这可能需要一种图像转换工具,因为服务端的脚本语言不

支 持 WBMP 的 转 换 。

下 面 有 一 个 PHP 的 例 子 来 说 明 使 用 脚 本 语 言 来 完 成 的 过 程 。

因为当前版本的 GD 不再创建 GIF 图像,而是称作 PNG (Portable Network Graphics)图像。所以使用当

前版本的 PHP,只需要修改少量的代码就可以将 GIF 转换到 PNG。另外,可以用“DuPont’s Image Magick

” 将 PNG 或 者 转 换 成 WBMP , 它 能 在 两 者 之 间 相 互 转 换 , 并 适 合 于 多 种 平 台 。

在代码里,笔者用到了 PHP 功能 ImageCreateFromGif(),要输一些文本到 GIF 图像上,可以使用 PHP

的 ImageGreate() 创 建 一 个 空 白 的 GIF/PNG 图 像 。

以下是代码:

第 60 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

<?

  // hardcoded "variables" are safer!

// path to blank GIF file – not really needed (see above)

      $blank = "./wapclock_blank.gif";

// You can look at it here

// path to input file generated by PHP

      $input = "/tmp/wapclock.gif";

// path to temporary output file. Extension is irrelevant

      $output = "/tmp/wapclock.out";

// path to ImageMagick convert

      $convert = "/usr/local/bin/convert";

      if($format == "gif") {

// if it’s GIF, send that Content-type

            header("Content-type: image/gif");

            $type = "GIF";

      }

      else {

          if($format == "wbmp") {

// if it’s WBMP, send that Content-type

              header("Content-type: image/vnd.wap.wbmp");

              $type = "WBMP";

          }

          else {

      // hope that the browser can read this

              header("Content-type: text/plain");

      // or someone forgot to set the format variable

              $type = "";

          }

      }

    // turn off caching

      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");


第 61 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

      header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

      header("Cache-Control: no-cache, must-revalidate");    

      header("Pragma: no-cache");

// create a GIF file from an empty GIF file (see faq)

      $im = imagecreatefromgif($blank);

// put the current time into the time variable

      $time = date("H:m:s");

// Place time variable sort of in the middle, with font size 4

      imagestring($im,4,6,15,$time,0);

// generate a GIF file with PHP (see faq)

      ImageGif($im,$input);

// empty the GD temporary buffer

      ImageDestroy($im);

      if(strlen($type) > 0) {

// if the type is known

// do the conversion

          exec($convert. " ".$input. " ".$type. ":".$output);

      }

      else {

// or do nothing

          echo("Unknown format!\n");

// and stop

          exit;

      }

  // open the converted file

      $fd = fopen($output, "r");

// read verything into a variable


第 62 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

      $contents = fread($fd,filesize($output));

// close the file

      fclose($fd);

// pour out the contents

      echo($contents);

  ?>

以上的代码是输出 GIF 的 WBMP 数据流。为了使用真正的图像,必须像下面这么写:

<?

      header("Content-type: text/vnd.wap.wml");

      echo("<?xml version=\"1.0\"?>\n");

      echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"

\"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n");

    echo("<!—Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 2000 Color Line ASA à \n");

  ?>

  <wml>

      <card id="wapclock" title="WAP Clock">

          <do type="prev" label="Reload Image">

              <go href="<?echo($PHP_SELF)?> "/>

          </do>

          <p>

              <img src="http://wap.colorline.no/wap-faq/apps/gfxclock.html?format=wbmp"

alt="You should see an image…"/>

          </p>

      </card>

  </wml>

12. 针对多大的 屏幕进行 开发?

WAP 设备的显示状况千差万别,有些支持图形,有些只支持文本。下面给出一些型号的屏幕尺寸:

Mitsubishi 还没有公布的 WAP 电话有 3 行 12 个字符的显示器。Nokia 7110 的屏幕是 96 个像素宽,65 个像

素高,最大的显示图像是 95 个像素宽,45 的像素高,高和宽的比例大约是 1.25。因此一个正方型应该是


第 63 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

一 个 实 际 宽 高 比 为 1:1.25 的 长 方 形 , 对 于 圆 来 说 也 是 一 样 。

Ericsson's R320 有一个类似大小的显示屏幕。精确的大小是 101 像素宽,52 像素高。可以显示 4 行文本,

而 且 自 动 换 行 是 默 认 的 方 式 。

Ed Chew ( Ed.Chew@scoot.co.uk ) 检验过 “ R380 Design Guideline for WAP Services” , 并且发现在

Ericsson R380 有 360x120 像素的分辨率 ( 83x28mm),  0.23 点距,浏览区域是限制在 310(宽),

100(高) pixels ,包括顶部的两个像素的空格,左边和右边的三个像素的空格,因此实际上只有 304 x

98 像 素 。

为了弄清显示器到底有多大的大小,在 http://wap.colorline.no/demos.html (选择 “Resolution matrix”)

有一个分辨矩阵的演示程序。 页面将显示三个不同大小的图像,一个垂直和一个水平,它们是一个方向

上十个像素,另外一个方向上只有一个像素,这样你马上就能知道屏幕到底有多大。另外他们的大小是:

80x80 , 100x100 和 120x120 像 素 , 因 为 有 些 浏 览 器 不 能 装 载 那 些 过 大 的 图 片 。

由于有些显示器的点是长方形的,而不是正方形的,所以开发人员需要重新影射图像,让他们看起来

像正方形,圆看起来像圆。但笔者不推荐这个方法,除非你知道用户所使用的 WAP 设备的真正比例。一个

在 7110 上看起来很好的图到了 R380 上会很糟糕。

13. 在 WML 中可以预先 装入图片 吗?

在 HTML 中,图片可以先使用简单的 JavaScript 来装入。但是在 WML 或者 WMLScript 中没有这样的方

法。 Paul St. George(email@paulstgeorge.com)提供了一种欺骗浏览器,让它装入图片但不显示的办法。

对于图片,如果足够小,可以事先读入到 WAP 的 Cache 中。如果所有的图像都能够装入的话,就不需要

连 接 到 服 务 器 上 了 。

首先需要一个能够撑满屏幕的透明图片,因此它们是一个像素宽,并且和显示屏幕具有相同的高度。将

图片做成透明的,这样它将占据整个屏幕,然后装载剩下的图片,等图片装载完后 timer 启动,开始动画。

在下面的例子中,可能需要改变一下 timer 的数值,让它有时间来装入图片。

<wml>

      <card id="p" ontimer="#f1">

      <!-- Adjust this timer to taste. -->

      <timer value="10"/>

          <p align="center">

              <img src="spacer1.wbmp" alt="x"/>

          </p>

第 64 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

          <p>

              <img src="1.wbmp" alt="1"/>

          </p>

          <p>

              <img src="2.wbmp" alt="2"/>

          </p>

          <p>

              <img src="3.wbmp" alt="3"/>

          </p>

          <p>

              <img src="4.wbmp" alt="4"/>

          </p>

          <p>

              <img src="5.wbmp" alt="5"/>

          </p>

      </card>

      <card id="f1" ontimer="#f2">

          <timer value="10"/>

          <p align="center">

              <img src="spacer15.wbmp" alt="x"/>

          </p>

          <p align="center">

              <img src="1.wbmp" alt="1"/>

          </p>

      </card>

      <card id="f2" ontimer="#f3">

          <timer value="10"/>

          <p align="center">

              <img src="spacer10.wbmp" alt="x"/>


第 65 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

          </p>

          <p align="center">

              <img src="2.wbmp" alt="2"/>

          </p>

      </card>

      <card id="f3" ontimer="#f4">

          <timer value="10"/>

          <p align="center">

              <img src="spacer08.wbmp" alt="x"/>

          </p>

          <p align="center">

              <img src="3.wbmp" alt="3"/>

          </p>

      </card>

      <card id="f4" ontimer="#f5">

          <timer value="10"/>

          <p align="center">

              <img src="4.wbmp" alt="4"/>

          </p>

      </card>

      <card id="f5" ontimer="#f1">

          <timer value="10"/>

          <p align="center">

              <img src="5.wbmp" alt="5"/>

          </p>

      </card>

  </wml>

14. 为什么有些 WBMP 无法显示?


第 66 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

图像可以使用<img>标签来指示。大多数无法显示的情况是因为错误地使用了<img>语法。这个标记至少

要有 src 和 alt 两个参数。其他参数是可选的。src 指定图像的来源,alt 指定当图像不能显示的时候显示的内

容,并且在最后有反斜杠结尾。

<img src="path/filename.wbmp" alt="Alternative Text"/> 

如果页面是由 HTTP 服务器提供的,服务器也必须设置 WBMP 正确的 MIME 类型。正确的类型是

“ image/vnd.wap.wbmp” 。

问题也可能出在图像本身,因为 WBMP 的格式非常有限,只有黑白两色,而且大小要适合 WAP 设备。

有些 WAP 开发工具让允许使用 GIF 图片,但是 WAP 设备只支持 WBMP 图片。

六、 关于 WAP 网关的 常见问 答

1. 什么是 WAP 网关?

WAP 网关是一个软件。它连接 Internet 或者 Intranet,使得 WAP 电话可以来访问其中的资源。有些网关可

能 具 有 将 HTML 文 件 转 换 为 WML 页 面 的 功 能 。

WAP 网关在 WAP 设备与 Web 服务器之间的连接中有好多功能。这些功能基本上是:

将标记语言(WML)从文本转换成可以被 WAP 设备读懂的编码(二进制/压缩的)格式;

将 WAP 设备的请求转换成 Web 中的 HTTP 请求;

在 Web 和 WAP 之间实现 SSL 加密和 WTLS 加密的转换;

在 Web 和 WAP 之间的传输层之间实现 TCP 和 WDP 的转换。

网关还具有一些其他可选的功能,例如将 Text 文件,HTML 文件转换成可读的 WAP 格式。如果网关安

装在移动营运商一边,移动营运商可能利用网关加入一些特殊的信息到 HTTP 流中,例如电话号码,位

置 信 息 等 等 。

有些 WAP 网关是在 Internet 上公开的,但是另外一些是在移动营运商那边,并且经常限制只接受从营

运 商 那 边 的 WAP 设 备 。

少数网关,或者像网关的设备 (“WAP Servers”)在内容提供商那边,这些人拥有 WAP 内容服务器。

2. 什么是 WAP Server?

除了集成的 WAP Gateway ,WAP Server 不比普通的 Web Server 多太多。笔者个人认为“ WAP server”这

第 67 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

个概念非常混淆。许多人认为必须有一个 WAP Server 才能提供 WAP 的内容,但是这不正确。WAP 内容可

以 由 任 何 普 通 的 Web Server 提 供 。

那么 WAP Server 的要点是什么呢?当讨论到 WAP 的安全性的时候,WAP Server 可以减少 WAP 环境中

的 安 全 漏 洞 。

既然 WAP Server 包含一个网关,因此可以跳过安装在移动营运商那边的第三方网关,并且主机上的应

用 程 序 对 加 密 数 据 流 有 完 全 的 控 制 能 力 。

注意如果要让用户能够访问网关,就需要正确的配置他们的 WAP 设备,大多数情况下是手工配置。

3. 在哪儿 可以得到 WAP 网关?

Nokia 的网关可以在 http://www.nokia.com/corporate/wap 得到。

4. WAP 网关是一个 像 Server 那样的物理 设备吗? 它是在 Internet 提供商 还是移动 提供商那 边?

WAP Gateway 是一个 WinNT 或者 Linux 机器上运行的 WAP Server 软件。它可以在 Internet 上的任何位

置,既可以在 Internet 提供商那边,也可以在移动提供商那边,还可以在用户的 PC 机上。

5. 安装 Nokia WAP Toolkit 后如何设置 网关,拨 号等等, 以便可以 使用用户 的主页?

启动 Nokia WAP Toolkit ,找到 Menu>Toolkit>Preferences。 选择“Use WAP gateway”选项,给出 WAP

网关所在的地址(127.0.0.1, 如果在本机运行网关程序)。用户可以从 Menu>Go>Load 中指定 URL。

6. 哪个公 司提供 WAP Server 的源代码?

open source gateway 在 http://www.kannel.org/中提供。

7. 可以在 广域网络 中使用网 关吗?

只要能通过拨号访问到网关的 IP 地址,在哪儿都是一样。

8. 在哪里 能找到有 关网关的 资料?

在很多情况下用户可能想使用多个网关来测试应用程序。因为他们以不同的方式工作。所以可能需要连

接 到 其 他 的 网 关 , 而 不 仅 仅 使 用 由 移 动 营 运 商 提 供 的 网 关 。

WAPdrive.net 有 一 个 个 非 常 好 的 公 共 网 关 列 表 :

http://www.wapdrive.net/DOCS/wap_gateways.htm

这里面有一些没有公布的网关。如果 IP 地址以“10.”开头,那么网关就是私有的,是营运商自己的。其

他 IP 地址的网关,也不一定就是公共网关。

9. 为什么 HTTP User_Agent 字符串在 Phone.com 的网关中有 所不同?

第 68 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

如果查看从 Phone.com 的 UP.Link 网关发送给服务器的 HTTP 头,将发现 User_Agent 有所不同。UP.Link

网 关 将 名 字 和 版 本 名 称 写 在 这 里 面 。

如 果 用 户 来 自 Nokia 或 者 爱 立 信 的 网 关 , 那 么 User_Agent 就 像 下 面 的 :

EricssonR320/R1A

如 果 用 户 来 自 UP.Link 网 关 , 就 如 同 下 面 的 :

EricssonR320/R1A UP.Link/4.1.0.1

它们清楚地显示了网关的类型和版本。从这里可以清楚的知道用户所使用的网关类型和版本。

七、 关于 WAP 浏览器 的常见 问答

1. 什么是 微型浏览 器?

类似于 PC 上的 Internet Explorer 或者 Netscape interpret HTML。WAP 微型浏览器的地位等价于一个在手

持设备上运行并解释 WML 的软件。

2. 在移动 电话上, WML 最大可以是 多少?

这个根据不同电话而不同。只要保持编译后的页面不要超过 1400 字节就可以了。

3. WAP 客户端上运 行的是什 么操作系 统?

只要客户端有 WML 微型浏览器,任何操作系统都可以。目标设备可以使用 Windows CE、EPOC、PalmOS

或者其他合适的操作系统。

4. WAP 用户代理可 以 Cache 页面吗 ?

Nokia 7110 可以 Cache 页面。Cache 的大小在 40k 左右。

5. 哪儿有 更新的代 理列表资 源?

如何测试浏览器的方法在以上的文章中有讲述。因此现在是需要一个很大的代理列表。这个列表将帮助

检 测 浏 览 器 的 类 型 。

这个文件是使用逗号分隔(Comma Separated Values)的格式。第一行是浏览器的名字,第二行是浏览器

的 描 述 。

User Agent ID 在 http://wap.colorline.no/wap-faq/useragents.php3 (注意这个文件是一个简单的 ASCII 文

件 , 虽 然 它 是 以 .PHP3 结 尾 。 )

这个文件可以随便拷贝。
第 69 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

6. 能不能 通过浏览 器语言的 选择来本 地化文本 ?

作为任何一个好的 HTML 浏览器,应该可以阅读由 WAP 设备配置的语言而不依赖于 Web 服务器向它

发 送 了 什 么 样 的 HTTP 头 。 许 多 设 备 都 这 样 。

HTTP 头中有一个 Accept-Language ,可以包含多种语言,使用逗号分开。每个标识有两个基于 ISO-639

的字符代码。例如 en 代表 English ,no 代表 Norwegian 等等。想了解更多关于 Accept-Language 请参考

HTTP 1.1 Reference , section 14.4 。 所 有 的 语 言 代 码 可 以 查 阅 ISO-639 。

下面的 PHP 代码显示了如何读取 Accept-Language 头,并选择语言。这段代码很容易就能转成其他代码,

其基本原理就是读取 Accept-Language 中的前两个字符,然后依据这两个字符选择语言。

<wml>

  <card id="loc" title="Localized Text">

      <p>

      <?

          switch(substr($HTTP_ACCEPT_LANGUAGE,0,2)) {

              case "en":

                  echo("Your WAP device is configured for English language");

                  break;

              case "no":

                  echo("Din WAP-dings er konfigurert for Norsk spr 錵 ");

                  break;

              case "sv":

                  echo("Din WAP-sak 鋜 konfigurerad f 鰎 Svensk spr 錵 ");

                  break;

              default:

                  echo("I have no idea what language your WAP device is using..");

          }

      ?>

      </p>

  </card>

</wml> 

7. 每个 WAP 设备的 浏览器的 功能和限 制是怎么 样的?


第 70 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

所有的设备都应该遵循 WAP 协议,当前是 WAP 1.1 和 WAP 1.2,但是真实的世界不是那么简单。随着

WAP 的进化,WAP 设备开发者将尝试推动 WAP 协议的封版。这就让开发者的生活更加有意思,但是同样

也 保 证 了 技 术 快 速 的 发 展 。

许多设备都无法完全遵循协议,虽然在许多情况下这种差别不是很大。同样有些设备还增加了一些 WAP

开 发 者 需 要 的 特 别 功 能 。

有关协议的最好资源是在 AnyWhereYouGo。你会发现它有关于 WAP 设备的列表非常有用。如果用户发

现某些特殊的设备,也请将数据加入到 AnyWhereYouGo 的数据库当中。

8. 不同的 的电话应 该使用哪 个 UP.browser 版本?

Phone.com Developer 站点有这样一个列表 。但是必须注册后才能得到这个列表。

9. 在哪儿 可以下载 Microsoft 的 Mobile Explorer?

现在知道的只有 Benefon Q 和 Sony CMD-Z5 使用 Microsoft Mobile Explorer。但是在 Sony 的站点只有一

个 简 单 的 Flash 。 Benefon 的 支 持 要 好 的 多 , 可 以 去 他 们 的 开 发 区 看 看 。

Microsoft Mobile Explorer 可以在注册之后下载。

10. Microsoft Mobile Explorer 有什么 特别的地 方 ?

Microsoft Mobile Explorer 或者 MME 是一种双模式的浏览器,他可以接受 HTML 和 WML 代码。这就产

生了一个新的问题:当内容既可以使用 HTML 也可以使用 WML 的时候,如何选择呢?其实这个已经不

是新问题,像 Opera 浏览器基本上是一个 HTML 浏览器但是支持 WML。但是 MME 没有将数据类型使用

正 确的 顺序 。例 如 HTML 比 WML 优 先。 如果 浏览 器检 测代 码是 没有 问题 的, 就应 该没 有问 题。

经过对 MME 模拟器长时间的测试,笔者发现每个人都在使用错误的浏览器检测代码。许多看起来可信

的事实:“Mozilla”意味着是 HTML 浏览器,例如:Netscape 或者 Internet Explore。其实有很多 HTML 浏

览器不使用“ Mozilla”来表示。相反它们询问浏览器可接受的数据类型。另外 MME 模拟器不支持文本的

WML ,只支持编译后的 WML ( WMLC ),它需要一个(象其他的 WAP 设备)网关来将 WML 转换成

WMLC 。

MME 同样支持 JPEG 和 GIF 格式和 WBMP 。另外, MME 发送 HTTP 头中有一个 HTTP-DISPLAY-

AREA 来 告 诉 内 容 提 供 服 务 器 的 屏 幕 大 小 。

MME 通 过 User Agent 来 表 示 自 己 为 Mozilla/1.22 兼 容 的 设 备 。 完 整 的 MME 模 拟 器 字 符 串 是 :

Mozilla/1.22 ( compatible;MMEF20;CellPhone ) 。

当使用 MME 模拟器,记住它有两种工作模式。它直接告诉内容服务器,要么接收 HTML,要么接收编

码的 WMLC。如果想直接使用文本 WML,用户必须告诉 MME 网关的位置。在这个模式下所有的 WAP 请


第 71 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

求通过 WAP 网关来处理,然后 MME 才能接收文本 WML。

11. 能不能在浏 览器中改 变字体?

在很多情况下是不行的。许多浏览器支持标签来改变字体的为黑体、斜体或者大小。但是字体的类型是不

会 改 变 的 。 到 现 在 还 没 有 看 到 这 样 的 浏 览 器 出 现 , 也 没 有 这 样 的 WML 标 签 出 现 。

但是 Morpheme 却做到了一种在线的办法来改变字体,叫做 “ Dwbmp” ,这实际上是使用文本书写的

方 式 来 制 作 和 使 用 WBMP 图 片 。 这 个 工 具 是 免 费 的 , 现 在 它 支 持 六 种 不 同 的 字 体 。

另外只有少数的设备支持图像 anchors(例如:Nokia 7110),因此不能使得 WBMP 像文本一样可以链

接 。

对于那些使用 PHP 或者其他服务器端脚本语言的可以使用 GD 来支持,将 TrueType 字体甚至是

Postscript 转换成 WBMP。

八、 关于 WAP 手机的 常见问 答

1. 怎样配 置手机才 能浏览到 Internet?

一般来说您可以先参考手机的使用说明书来进行配置。在手机配置当中有几种典型的 WAP 手机配置的

详细说明。

2. 市场上 有哪些 WAP 手机?

目前有 Nokia 7110,Ericsson R320,Motorolar L2000www 等等。随着时间的推移会有大量的新款 WAP

手机推出。一般来说大屏幕,高分辨率并且具有中文显示和输入的 WAP 手机在浏览 WML 网页的时候效果

比较好。

3. 是不是 所有的手 机都能执 行 WAP1.1 的标准,还 是各有各 的特性?

所有的 WAP 手机应当支持 WAP 1.1,但是有些手机有自己不在 WAP 协议之内的特点。

4. 国内有 这样的手 机卖了吗 ?

国内市场上已经有很多种 WAP 手机。但是国内还没有生产 WAP 手机。

5. 这样的 手机大概 需要多少 钱?

这样的一部手机一般在 2000 元左右。为了使更多的人加入到 WAP 中来,以后手机还要降价。

6. 若 WAP 手机要上网 ,需要申 请那些服 务?


第 72 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

如果要用 WAP 手机上网,首先必需开通一般的通话服务、短消息服务、数据服务。当以上服务都申请好

后,再进行上网设置密码。

7. 如何使 用 WAP 服务?

首先,必须要有 WAP 手机,如 Nokia 7110、Ericsson R320 等型号;其次,必须向电信业者申请 WAP 服

务。(目前国内开户费 200 元,月租 50 元)。

8. 如何在 Nokia 7110 里面输入 URL?

“/”符号可以通过按“*”,其他符号可以滚动到与其配的符号找到。

9. 在哪儿 可以得到 现有的 WAP 支持设 备?

AnywhereYouGo.com 有一个完整的 WAP 设备列表。

http://www.anywhereyougo.com/wap/devices/Index.po

10. 在购买 WAP 手机之前应 当考虑哪 些问题?

在考虑购买 WAP 手机之前应该考虑以下问题:在现在的市场上只有几种类型,例如:流行的 Nokia

7110 和 Ericsson R320;既然 WAP 是新技术,其产品肯定还不是很成熟(可能会有 Bug);电话不可能支

持所有的 WAP 1.1 功能;WTA 功能目前还不支持。

11. 浏览 WAP 站点的时候 还能接收 或者拨打 电话吗?

当然。数据和声音使用不同的线,并且你在浏览的时候无须担心来电。对于拨号,请检查 7110 的“User

Number”功能。

12. 移动电话上 网时是按 照时间收 费还是按 照流量收 费?

这要看移动电话基于 CSD 还是 SMS 信道。使用 SMS 信道,只需要为传输的数据付费,如果你使用的是

CSD 信道,则需要按照时间付费。

13. 为什么需要 指定拨号 号码和 WAP 网关?

电话号码是拨号到 ISP 上所使用的电话号码,IP 地址是指定网关。如果没有指定网关,WAP 设备将无法

连接到 Internet 网络。

14. 可以通过改 变 7110 的设置 来发送 SMS 短消息吗?

可以。可以通过设置一个叫做 OTA (Over The Air)来发送 SMS 短消息。

15. Nokia 7110 的上下文 Cache 是多大?

第 73 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

大约是 40 k。

16. Nokia 7110 的操作系统 可以升级 到 v04.77 吗 ?

是的。7110 的系统可以升级,但只能在 Nokia 的服务点做到。这可能删除你现有的电话本。

17. 无法在 7110 上显示 表格数据 什么问题 ?

Nokia 7110 不支持多列的表格,因此你要把任何表格转换成单列的表格。

18. 有没有一个 WAP 电话和 设备的列 表?

注 意 这 里 的 列 表 是 目 前 的 状 态 。 里 面 有 些 信 息 不 一 定 正 确 。

AnyWhereYouGo 有一个很好的 WAP 设备列表(见表 10-9),包括 phones 和 PDAs。(许多信息都直接

来自制造商)

表 10-9 WAP 设备列表

Alcatel One Touch View db WAP Phone  

http://www.alcatel.com/consumer/mobilephone/view_dbwap.htm

Alcatel One Touch 30x Series Phone 预计 2000 年 9 月

http://www.alcatel.com/consumer/mobilephone/

Alcatel One Touch 50x Series Phone 预计在 2000 年 10 月

http://www.alcatel.com/consumer/mobilephone/

Alcatel One Touch 70x Series Phone 预计在 2000 年 11 月

http://www.alcatel.com/consumer/mobilephone/

Alcatel Onetouch View Phone  

http://www.alcatel.com/telecom/mbd/products/products/detailed/gsm/ot_view/index.htm

Siemens S35i Phone  

http://www.siemens.com/mysiemens/english/mobile/index.html

Siemens M35i Phone  

http://www.siemens.com/mysiemens/english/mobile/index.html

Siemens C35i Phone  

http://www.siemens.com/mysiemens/english/mobile/index.html

第 74 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

Siemens S25 Phone 只支持 HDML

http://www.siemens.se/telefoner/mobiltelefoner/s25/

Sony CMD-Z5 Phone 支持 WML 和 HTML

http://www.sony-europe.com/com/z5/index.html

Nokia 7110 Phone  

http://www.nokia.com/phones/7110/index.html

Nokia 6210 Phone  

http://www.nokia.com/phones/6210/index.html

Nokia 6250 Phone 还没有投放市场

http://www.nokia.com/phones/6250/index.html

Nokia 6185 Phone 只在美国市场上有

http://www.nokiausa.com/beauty/1,1002,28,FF.html

Motorola Leap P7389 Phone  

http://www.motorola.com

Motorola Timeport Phone  

http://www.motorola.com

Motorola Talkabout Phone  

http://www.motorola.com

Motorola i1000plus Phone 只适用于 iDEN

http://www.motorola.com

Motorola i500plus Phone 只适用于 iDEN

http://www.motorola.com

Ericsson MC218 Palmtop  

http://www.ericsson.se/WAP/products/mc_218.shtml

Ericsson R380 Phone  

http://www.ericsson.se/WAP/products/r380.shtml

Ericsson R320 Phone  

第 75 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

http://www.ericsson.se/pressroom/r320a.html

3Com Palm Pilot Palmtop 需要浏览器软件

http://www.palmpilot.com/

Neopoint 1000 Phone  

http://www.neopoint.com/products/index.asp

Neopoint 1600 Phone  

http://www.neopoint.com/products1600/index.asp

Sagem MC850 Phone 还没有投放市场

http://www.phone.com/news/Archive1999/031899_SAGEM.html

Samsung Duette SH-P10 Phone 只适用于 CDMA

http://www.phone.com/solutions/alliances/samsung.html

Samsung SGH-800 Phone 还没有上市

http://www.phone.com/solutions/alliances/samsung.html

Mitsubishi T250 Phone 只适用于 CDMA

http://www.mobileaccessphone.com/products/index.htm

Compaq Aero PDA WindowsCE WAP1.1 微型


浏览器

http://www.compaq.com/products/handhelds/

Qualcomm QCP-860 Phone 只适用于 CDMA

http://www.qualcomm.com/cda/technology/display/0,1595,,00.html

Qualcomm QCP-1960 Phone 只适用于 CDMA

http://www.qualcomm.com/cda/technology/display/0,1595,,00.html

Qualcomm QCP-2700 Phone 只适用于 CDMA

http://www.qualcomm.com/cda/technology/display/0,1595,,00.html

Qualcomm QCP-2760 Phone 只适用于 CDMA

http://www.qualcomm.com/cda/technology/display/0,1595,,00.html

第 76 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

九、 关于 WAP 安全的 常见问 答

1. WAP 提供怎样的 安全性?

WAP 1.1 支持无线传输安全协议(Wireless Transport Layer Security)。WTSL 和 Internet 的 SSL 类似,具

有 许 多 重 要 的 加 密 功 能 , 但 在 客 户 端 只 需 要 较 低 的 运 行 能 力 。

WAP 网关能从网上接收 SSL 加密的消息并把这些消息转换成 WTSL 加密的信息传给移动设备,这种转

换消耗的时间按毫秒计算。 WAP 网关的主要作用就是在两种协议之间建立一个虚拟的安全转换连接。

移动设备和服务器之间存在有两个安全问题:一个是从移动设备到网关;另一个是从网关到服务器。

WTSL 是保证前者的安全通讯,SSL 是保证后者的安全通讯。如果移动设备使用了不具有加密功能的 SIM

卡,即使在 URL 中申请使用 SSL 接口,在从移动设备到网关的过程中 URL 的申请仍然是显式的,也就

是说是不安全的,窃听者可以通过截获空间散发的无线电波来窃取用户的口令和密码。

2. 通过 WAP 的传输 安全吗?

当然。在移动电话和 WAP 网关之间使用 WTLS(Wireless Transport Layer Security),网关和 Web Server

之间使用 SSL(Secured Sockets Layer)就可以。

3. WAP 如何同 SSL 与 WTLS 工作?

SSL(Secure Sockets Layer)在“web”中广泛用来在浏览器和服务器之间加密数据流。这同样也适用于

WAP 环境,但是 SSL 只用在 Web Server 和 WAP 网关之间。在 WAP 网关和 WAP 设备之间,有一个类似系

统 叫 做 WTLS ( Wireless Transaction Layer Security ) 。 WTLS 是 专 门 适 合 于 无 线 环 境 的 。

安全是一个非常敏感的问题,虽然没有任何一个系统是绝对安全的,但笔者认为 SSL 和 WTSL 对于很

多 应 用 是 足 够 安 全 的 。 这 两 个 协 议 在 WAP 网 关 中 相 互 转 换 。

SSL 并不直接兼容 WTLS ,因此 WAP 网关要解密从 Web Server 过来的 SSL 保护数据流,然后使用

WTLS 加 密 发 送 给 WAP 设 备 。 在 WAP 网 关 中 , 数 据 是 没 有 保 护 的 。

模型如下:

                |                              |

  [WAP device]------------[WAP gateway]-----------[Content server]

                          <---WTLS--->{unprotected}<---SLL--->

                              |

     (Firewall) |                               | (Firewall)

 
第 77 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

想象一下如果银行或者其他机构使用公开的 WAP 设备,处理一些敏感的数据。当数据离开用户的系统

和网络的时候,它们是受到保护的。但是在进入 WAP 网关之后(网关是由第三方操纵的,例如:移动营

运商)数据被解密。虽不能说所有的移动营运商都是危险的,但是将敏感数据暴露给不知道的第三方是很

不 让 人 放 心 的 。 任 何 一 个 营 运 商 的 问 题 将 是 所 有 营 运 商 的 问 题 。

主要的 WAP 公司都在开发一种称做“WAP Server”或者是具有 WAP 网关的 Web 服务器来解决端到端的

问 题 。 因 为 数 据 离 开 服 务 器 ( “ WAP Server” ) 的 时 候 就 已 经 是 WTLS 加 密 。

模型如下:

                |                             |

  [WAP device]------------------------------------["WAP server" (acting as WAP gateway)]

                          <---------------WTLS--------------->

                 |                             |

      (Firewall) |                             | (Firewall)

这样 WAP 网关就不再是整个过程中的一个环节。那么用户必须重新配置它们的 WAP 设备来指向“WAP

Server”来建立相应 WAP 会话。当用户想访问其他地方的时候,又必须配置来指向其他的网关。虽然有的

WAP 设 备 比 较 好 配 置 , 但 是 有 些 却 非 常 困 难 , 这 多 少 有 点 烦 人 。

除了以上的问题,实际上许多移动营运商将端到端的服务器放在用户拨号到 Internet 的地方。他们的

WAP 网关具有同样的私有的 IP 地址,通常是在一个防火墙后面。这个防火墙通常只允许使用 HTTP 协议

的 80 端口。WAP 网关使用这个端口来接受从内容服务器来的数据,那也是他的真正需求。当 WAP 设备试

图访问其他的网关的时候,那么防火墙就将停止他们的操作,要么因为是 WAP 设备 IP 是不允许在

Internet 上访问其他的设备,要么是无法打开所需求的端口。这样移动营运商就有效地阻止了用户使用其他

的 网 关 。

有一些关于 WAP 安全方面的内容,请看:

Wapforum's WTLS 协议

Baltimore Telepathy 安全讲解

Tantau 关于安全的文章:《An Introduction to WML Programming and Third-Party WAP Toolkits》

Phone.com 关于无线安全的文章:《Understanding Security on the Wireless Internet》

十、 关于 WAP 其他方 面问答


第 78 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

1. 在哪儿 可以下载 Phone.com 的 UP.SDK?

Phone.com 的 UP.SDK 可以在注册之后下载。

2. 如何在 Win2000 上安装 Nokia SDK?

Johannes Herbst (johannes_herbst@bwc.at)提供了一个快捷的方法来解决 Win2000 的安装问题。

从 Win2000 的安装光盘安装 Win2000 的支持工具(\support\tools\setup.exe);

找到一个叫做 APCOMPAT.EXE 的文件;

启动 APCOMPAT 并设置 OS-version 为 NT4 SP3 并运行;

启动 Nokia SDK 安装文件;

在解包以后,程序将挂起很长一段时间;

从 Win2000 的 Task Manager 中强制结束 setup 进程;

Nokia SDK setup 将正常继续。

3. 哪儿能 下载 Nokia SDK?

Nokia SDK v.2.18 是一个非常好的 7110 模拟器,但是 Nokia 对它采取了相当的保密措施。其他的设备厂

家,Phone.com 和 Benefon 只要简单的注册就可以得到。Nokia 只允许开发者使用 Nokia Toolkits,而这些版

本 很 难 和 WAP 环 境 搭 配 。

Nokia WAP SDK 很 难 找 到 , 每 次 找 到 了 , 它 就 消 失 了 。

当前笔者知道它在:http://www.bwl.uni-mannheim.de/~broeker/software.htm。

4. Nokia SDK 的基本验证 是怎么回 事?

基本验证好像是后加入到软件中的,并没有考虑将 WAP 模拟器和工具包形成产品。基本验证已经肯定

要加入到真正的 Nokia 7110 以及防火墙软件 4.73 或者更高。

5. 除了使 用 Nokia WAP Toolkit 模拟器 还有其他 工具吗?

Nokia Toolkits 模拟器的模拟效果与真的 Nokia 7110 相差较大。应该使用 Nokia SDK 2。最新的版本是

v.2.18。这个 SDK 包含了最好的 7110 模拟器和其他一些有用的工具和一些真实的例子

6. 为什么 Nokia 7110 不能 POST 超过 160 个字符?

有一些版本的 Nokia 7110 浏览器不能 POST 超过 160 个字符的变量。在实际中,似乎有一个内容长度的

第 79 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

限制,大约在 170~180 之间。从另外的角度来说,变量的名字和它们的内容算在一起。如果只 POST 一个叫

做“A”的变量,那么这个变量只能包含大约 160 个字符的内容。如果有好几个变量,如有一个名字叫做

“ thisishenameofaverylongvariable” 的 变 量 , 那 么 包 含 的 内 容 将 更 少 。

但是有一个解决方案,那就是要求电话重新配置。在 Connection Settings 菜单,找到一个叫做 Connetion

type , 把 它 设 置 为 Continous , 那 么 将 发 送 更 大 的 变 量 内 容 。

如果想知道 GET 或者 POST 能发送多大的内容,请看有关 GET 和 POST 的 FAQ。

7. 运行 Nokia Toolkit 需要安装什么版本的 Java 包?

只需要 Java 1.2 环境。如果想运行 100%纯的环境,例如在 Linux 下,还需要一个 Java XML 解释器。

十一 、关于 WAP 站点建 设的常 见问答

1. WAP 网站需要那 些硬件设 施?

如果仅仅是想作为 WAP 服务提供商,那么 WAP 的硬件设施和 WWW 服务的硬件设施完全一样,只需

要对以前的 WWW 做适当的配置就可以应用于 WAP 服务。当然,也可以去购买专门的 WAP Server。专用的

WAP 服务器可以集成许多其他功能模块,例如:WAP 安全性、PUSH 功能等。

2. WAP 的安全性如 何?

WAP 堆栈中的一层,称为 WTLS,提供加密和效验的服务 -客户端安全。这个防止了网络上的舞弊,为

电子商务和 Interanet 开通了道路。

3. 应该如 何配置自 己的 Web 服务器 使它能够 支持 WAP?

在 服 务 器 端 加 入 以 下 配 置 :

.WML text/vnd.wap.wml

.WMLC pplication/vnd.wap.wmlc

.WMLS text/vnd.wap.wmlscript

.WMLSC application/vnd.wap.wmlscriptc

.WBMP image/vnd.wap.wbmp

4. 要为 WAP 设备提 供 WML 内容应 当做些什 么?

最简单的提供 WML 内容的方法是使用一个好的 HTTP 服务器,笔者推荐 Apache。如果想生成动态的内

容,笔者推荐一个叫做 PHP 的服务端脚本语言。这样既能够书写服务端的 HTTP 程序适合 HTML 浏览器,

第 80 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

也 能 够 书 写 WAP 程 序 适 合 WML 浏 览 器 。

只有 WAP 站点能够连接到移动网络的提供商,用户才可能在手机上通过输入 URL 来访问它。既然 www

已 经 变 成 一 个 标 准 的 名 字 , wap 好 象 也 在 变 成 一 个 标 准 。 例 如 : “ wap.domain.com” 。

一个非常重要的事情就是要记住让 HTTP 服务器告诉 WML 浏览器,它接收到的是一个 WML 页面,而

不是一个 HTML 页面,这个可以通过配置 MIME 来完成。

5. 如何配 置现有的 Apache 1.3.9 Web 服务器使它 能提供 WML 服务?

需要配置正确的 MIME 类型。

text/vnd.WAP.WML WML

text/vnd.WAP.WMLscript WMLs

image/vnd.WAP.WBMP WBMP

application/vnd.WAP.WMLc WMLc

application/vnd.WAP.WMLscriptc WMLsc

6. 如何在 PWS 4 下加入 MIME 类型?

可以通过“ Windows Explorer->Folders Option->File Types->New Type;” 直接增加可选择的 mime.type 文

件 。

对于 PWS,还可修改注册表,先在:HKEY_CLASSES_ROOT 层加入主键 .wml,再加入串值 Content

Type 为 text/vnd.wap.wml ,然后在 HKEY_LOCAL_MACHINE\Software\CLASSES\MIME\Database\Content

Type\中加入主键 text/vnd.wap.wml,再加入串值 Extension 为.wml。

7. 有哪些 HTTP 的相关 MIME 类型?

当使用基于 PC 机的浏览器操作一个“web page”的时候。“web server”告诉用户的 PC 浏览器将接收到一

个怎么样的文件类。这个经常被称做文件映射:MIME。最常见的 MIME 类型是普通的 HTML 文件,叫做

“ text/html” 。 但 是 对 于 WAP 微 型 浏 览 器 , 它 不 能 浏 览 HTML 页 面 , MIME 的 类 型 也 不 同 。

服务于 WML 的 MIME 类型见表 10-6

表 10-6 MIME 类型

  MIME 类型 扩展名

文件类型

Plain WML documents text/vnd.wap.wml .wml

第 81 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

Wireless Bitmap Images image/vnd.wap.wbmp .wbmp

Compiled WML documents application/vnd.wap.wmlc .wmlc

WMLScripts text/vnd.wap.wmlscript .wmls

Compiled WML Scripts application/vnd.wap.wmlscriptc .wmlsc

为 了 将 MIME 类 型 加 入 到 Apache HTTP 服 务 , 可 以 按 照 下 面 步 骤 操 作 :

(1) 编 辑 srm.conf 文 件 ( 通 常 在 /etc/httpd/conf ) 。

(2)定位在 AddType 区域,加入以下内容:

# MIME Types for WAP

AddType text/vnd.wap.wml .wml

AddType image/vnd.wap.wbmp .wbmp

AddType application/vnd.wap.wmlc .wmlc

AddType text/vnd.wap.wmlscript .wmls

AddType application/vnd.wap.wmlscriptc .wmlsc。

(3) 保存文件并重新启动 Apache HTTPd。

如果你没有控制整个 Apache 服务器的权限,例如用户在一个 ISP 下面,可以加入一个叫做 .htaccess 文

件到每个放置 WML 页面的目录。当服务器从这个目录读文件的时候。它将根据 .htaccess 文件的规则输出。

一个典型的 .htaccess 看起来如下:

DirectoryIndex  index.wml

addtype text/vnd.wap.wml wml

addtype application/vnd.wap.wmlc wmlc

addtype text/vnd.wap.wmlscript wmls

addtype application/vnd.wap.wmlscriptc wmlsc

addtype image/vnd.wap.wbmp wbmp 

注意告诉服务器,index 文件是 index.wml。 同样要注意到服务器能够阅读这些文件。在某些情况下服务

器由于安全问题而忽略这些文件。因此这些要同 ISP 协商。(增加 MIME 类型到 Microsoft IIS server,也可

以在 WAP 中的其他部分)。关于其他服务器,请参看它们的文档。

8. 如 何 使 用 Nokia 7110 取 得 自 己 PC 上 的 站 点 ? 需 要 本 地 的 移 动 商 提 供 WAP 服 务 吗 ?


第 82 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

需要其 他设备例 如 Modem 吗?在 哪儿能够 访问自己 PC 上的 WML 页面?

使 用 自 己 的 手 机 看 WAP 站 点 , 要 按 照 以 下 步 骤 进 行 :

安装一个 Web Server(例如 IIS 4.0)并且将 WML 应用放在一个虚拟目录中,将 PC 连接到 Internet。注

意机器的 IP 地址(当你使用拨号的时候,每次的 IP 地址可能不同)。只需要网络营运商提供数据连接。

使用 WAP 电话,例如 Nokia 7110 或者 Ericsson R320。拨号到 ISP。记住自己的 PC 已经拨号到 ISP。有的

ISP 只 允 许 一 次 一 个 连 接 , 有 的 允 许 多 个 。 这 个 要 根 据 实 际 情 况 来 确 定 。

输 入 机 器 的 IP 地 址 和 虚 拟 目 录 的 名 字 , 例 如 :

http://x.x.x.x/virtual_path/somepage.WML

使 用 一 个 公 共 的 网 关 的 IP 地 址 , 例 如 : Ericsson 。

现在就可以拨号,并激活以上设置。

9. 如何使 用 WinNT 4.0 上的 RAS Server 与 Nokia 7110 相连接 ?

需要一个 WAP 网关,并且在自己的服务器上配置 MIME 类型。将网关设置成 Web Server,再使用电话

拨号就连接上了。(这要求必须有一个配置好的 RAS 帐号。)

10. 有 一 个 需 要 Login 的 WAP 站 点 , 有 没 有 办 法 避 免 每 次 让 用 户 重 复 输 入 用 户 名 / 密 码 ?

可以使 用电话的 SIM 卡来确 认用户吗 ?

现在还不可能通过 WAP 在 SIM 卡中保存数据,也不能使用电话号码来确认用户。从安全的角度来讲,

也 必 须 让 用 户 输 入 用 户 名 和 密 码 , 提 交 后 标 记 结 果 页 给 用 户 这 样 一 个 URL 标 签 :

http://www.website.com/login.asp?user=bill&pass=secret

11. 已经有一个 Web 站点,如何 建立一个 WAP 站点?

首先要明白这个文件是给那些的确已经拥有 Web 站点的公司,而现在想转到 WAP 上来。不是指那些开

发者或者普通的用户。强力推荐《 Making existing web content available to the mobile Internet》。文章在 :

wap.com。

12. 如何绕过营 运商,直 接连接到 Internet?

如果认为一个营运商不允许访问其他的 WAP 资源,或者用户只是由于开发目的想绕过营运商,有很多

WAP 设 备 可 以 让 做 到 这 一 点 。

不 同 的 WAP 设 备 有 不 同 的 工 作 方 式 , 但 是 你 应 该 能 勾 勒 出 整 个 框 架 。

首先需要一个本地的 Internet Service Provider 的电话号码。它使你能够通过普通的拨号连接到 Internet。其

实许多 ISPs 提供很多免费的拨号连接。ISP 不一定是本地的,要有给移动营运商付费的准备。ISP 需要支持

第 83 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

PPP 协议,可以使用 userid 和 password 同 ISP 建立连接,然后需要一个公共网关(见表 10-7)的 IP 地址。

表 10-7 一些公共网关

提供商 IP 地址 网关类型

Ericsson http://www.ericsson.com/ 195.58.110.201 Ericsson

wapHQ http://www.waphq.co.uk/ 212.1.130.132 wapHQ Gateway

用户要使用电话号码、 useri、password 和 IP 地址配置自己 WAP 设备。以 Nokia 7110 为例,在 Services,

Settings, Connection Settings 中进行配置。Nokia 7110 使用 SMS 信道作为缺省的,需要将它改为 Data ,同

样 要 设 置 Data Call Type 和 Connection Types 。 对 于 Data Call Type 需 要 选 择 ISDN 并 测 试 。 对 于

Connection Type 你可能选择 Temporary 并再次需要试验。最后设置 Home Page 指向某个你知道的 WAP 设

备。你就可以拨号访问自己的 WAP 设备了。

13. 能不能建立 一个 WAP 站点,但不 使用真正 的 WAP 设备?

WML 内容可以被任何微型浏览器或者用户代理所理解。因为内容都是为 WAP 设备所写的,所以最好的

阅读 WML 内容的方式可能是使用一个 WAP 设备模拟器。但是这些应用程序都很大,而且需要其他的运行

环 境 。

表 10-8 列出了一些浏览器的模拟器和相关的信息。

表 10-8 浏览器的列表

浏览器 环境

WAPJAG.DE Internet Explorer


http://www.wapjag.de

AU Systems WAP Browser PalmOS 3.3


http://www.wapguide.com/wapguide/browser.html

WinWAP Windows9x/NT
http://www.slobtrot.com/winwap/index.htm

Wapalizer Internet
http://www.gelon.net/ Explorer/Netscape

Fetchpage Any HTML browser


http://webcab.de/fetchpage.htm

WAPman Windows9x/NT

第 84 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

http://www.wap.com.sg/downloads/downloads.htm

WAPman PalmOS 3.1


http://www.wap.com.sg/downloads/downloads.htm

Nokia WAP Toolkit 2.0 Beta Windows9x/NT+Java


http://www.forum.nokia.com/wapforum/main/1,6668,1_1_30_2_3,00.html

Phone.com UP.SDK Windows 9x/NT


http://developer.phone.com/

Ericsson R380 Emulator Windows NT 4.0


http://www.symbian.com/epoc/r380wapemulator.html

Nokia SDK 2.18 Windows9x/NT


http://wap.colorline.no/wap-faq/index.html?pair=06.001

Wappy’s Wapview Internet


http://wappy.to/ Explorer/Netscape

Opera 4.0 Standalone kick-ass


http://www.opera.no/ browser

EzWAP Windows NT, 2000,


http://www.ezos.com/Soft/EzWAP/EzWap.asp CE and Pocket PC

14. 想建立自己 的 WAP 营运服务该 怎么做?

建立自己的 WAP 拨号服务系统是很简单的,在市场上有很多这种解决方案,从高端的 Cisco Access

Servers ( AS5200 )到低端的基于 Microsoft NT Remote Access Service 和 Novell's Netware Connect 的软件

解 决 方 案 。

这也许要花费很多力气来解释如何安装和配置这些系统。但是这些的确都与 WAP 无关。一个 WAP 设备

只 是 从 电 脑 上 通 过 Point-to-Point Protocol ( PPP ) 取 得 一 个 IP 地 址 。

如果已经有了一台装有 Microsoft NT 4.0 和 9600 bits/s 的 Modem。那么就可以直接建立一个简单的系统。

请 看 Fergal Moran ( 962264N@knotes.kodak.com ) 的 《 Configuring your NT server to accept remote

connections 》

把这些设置移植到其他系统应该没有问题。只要能拨号到 Windows98 Dialup-Networking,就可以拨号到

WAP 设 备 。

注意 WAP 设备对 IP 的配置。现在需要建立自己的内部 WAP 网关和 HTTP 服务器。或者只是使用公开的

第 85 页 共 86 页
WAP 常见问题问答大全(www.airchn.cn)

WAP 网关或者 HTTP 服务器。

15. 如何注册一 个 WAP 域名?

其实 WAP 域名和 Web 域名没有什么区别。如果你有一个 Web 站点,你同样有一个将该站点挂在 Internet

上 的 Internet Provider 。 最 常 见 的 Web 站 点 是 www 或 者 www.mydomain.com , 典 型 的 WAP 站 点 名 是

wap.mydomain.com 。

当域名已经通过 Internet Provider 或者在其他公司注册之后。(例如:Network Solutions ,你注册了一个

mydomain.com)。一个 Domain Name Server(DNS)需要指定一系列在这个域名下的一系列的主机名字和

地址。DNS 只是简单的将人们可读懂的文本地址转换成 IP 地址。如果有一个 Web 站点,将至少有一个主机

叫 做 www , 它 指 向 IP 地 址 。 当 某 个 人 想 访 问 站 点 的 时 候 , DNS 将 被 询 问 : “ 具 有 域 名 是

www.mydomain.com 的主机 IP 地址是多少?”,然后 DNS 回答 IP 地址,例如:“ 193.143.2.90”。然后请

求 者 使 用 这 个 IP 地 址 来 操 作 站 点 。

为 了 将 WAP 主 机 加 入 到 域 中 , 只 需 要 在 DNS 主 机 中 增 加 一 个 叫 做 wap 的 主 机 。 任 何 请 求

wap.mydomain.com 将 接 收 到 WAP 主 机 的 IP 地 址 。

WAP 主机可以和 Web 主机拥有同样的 IP 地址。那就意味着该主机既提供 Web 内容也提供 WAP 内容。因

为 Web 浏览器接收 HTML,WAP 浏览器接收 WML,Web 服务器可以通过简单的脚本来判断浏览器的类

型,并提供适当的内容。因为 www.mydomain.com 和 wap.mydomain.com 主机的名字都指向同一个 IP 地址,

所以 WAP 用户可以操作 www.mydomain.com,Web 用户也可以操作 wap.mydomain.com。毕竟文本主机名

字 是 机 器 IP 地 址 的 代 表 。

如果一个服务器为 Web 内容,另外一个为 WAP 内容,就需要使用 Web 名(www.mydomain.com)指向

Web Server,使用 WAP 名(wap.mydomain.com)指向 WAP 内容服务器。

第 86 页 共 86 页