WAP
构架
¨
WML
是一种适用于无线互连网的标记语言。
¨
WAP
(
Wireless Application Protocol
)是适用于无线互连网的网络协议。
¨
客户是各种基于
WAP
协议的手掌设备或者是各种模拟器。
¨
WAP
网关有两个功能:对
WML
网页进行编码和解码;实现
HTTP
协议和
WAP
协议之间的转换。
¨
WAP
服务器是指在
MIME
配置中设置了
WML
数据类型的
Web
服务器。
¨
为什么采用
WAP
:方便、安全。
URL
¨
WML
使用和
HTML
相同的引用方式。
http://www.motorola.com/great.wml
¨
在
URL
后使用片段。
http://www.motorola.com/great.wml#login
¨
相对的
URL
——基础的
URL
是当前的卡片。
<go href=”/next” />
Content Type
¨
在互联网上使用
WML
数据类型。
¨
要想使用
Web
服务器传输
WML
数据类型,就需要对
Web
服务器的
MIME
设置进行配置。
¨
需要增加以下数据类型:
wml
:
text/vnd.wap.wml
wmlc
:
application/vnd.wap.wmlc
(经过编码
WML
数据类型)
wmls
:
text/vnd.wap.wmlscript
wbmp
:
image/vnd.wap.wbmp (BMP
图象
)
其他可选的数据类型:
wmlsc
:
application/vnd.wap.wmlscriptc
wmlscript
:
text/vnd.wap.wmlscript
ws
:
text/vnd.wap.wmlscript
wsc
:
application/vnd.wap.wmlscriptc
WML
字符集
¨
WML
是
XML
的子集,继承了
XML
的字符集设置。
¨
WML
文档缺省的字符集是
UTF
–
8
。
¨
显示中文。只要在开头使用
encoding
就可以。在
Motorola L2000www
上测试通过。
<?xml version="1.0" encoding="gb2312"?>
元素和属性
¨
元素
1
.一个完整的
WML
标记有以下两种格式:
<tag> content </tag>
<tag/>
¨
属性
1.
可以随意地指定或添加元素的属性。
2.
属性的格式:
<tag attr=”abcd”/>
。
3.
所有的
XML
名字都是大小写敏感的。
4.
所有的属性值都必须用双引号或单引号括起来。
变量
¨
WML
卡片中可以使用变量。
¨
描述变量的语法在
WML
中有最高的解释优先级。
¨
当空格无法表示一个变量名结束的时候,就必须使用括号将参数名括起来。
¨
$$
在
WML
中代表一个‘
$
’符号。
¨
变量语法格式如下:
$identifier
$(identifier)
$(identifier:conversion)
¨
变量使用说明:
1.
可以在字符串中使用。
2.
可以在运行中更新变量的值。
3.
变量处于设置状态(
NOT NULL
),如果变量不等同于空字符串。
4.
变量处于未设置状态(
NULL
),如果变量等同于空字符串。
¨
变量替代:
1.
变量的数值可以代入卡片中的文本。
2.
只有文本部分可以实现替代。
3.
任何元素和属性都不能使用变量来替代。
4.
替代将在运行期发生。
5.
替代将不影响变量现在的值。
6.
替代是按照字符串替代的方式工作。
7.
如果一个没有定义的变量要实现替代,那么该变量将被看作空字符串。
8.
变量名是由
US-ASCII
码、下划线和数字组成,并且只能以
US-ASCII
码开头。
9.
变量名是大小写敏感的。
‘
$
’符号
¨
美元符号
1.
要想在文本中显示美元符号,必须成对使用。
2.
一个美元符号表示变量替代。
3.
一个简单的显示美元符号的例子:
This is a $$ character.
¨
有效性
1.
在美元符号后面接字符串都将被认为是变量替代或者是生效。
2.
几个无效的例子:
<!--bad variable syntax -->
Balance left is $10.00.
<!—bad placement (in the type attribute)-->
<do type=”x-$(type)” label=”$type”>
Newcontext
属性
Newcontext
等于
true
或
false
,将决定浏览是否做以下事情:
¨
删除所有在当前上下文中定义的变量。
¨
清除历史信息。
¨
重新设置所有的状态为一个缺省的状态。
<card id=”card1” title=”Mortgage Calc” newcontext=”true”>
大小写敏感
¨
WML
和
XML
都是大小写敏感的语言。
¨
所有的
WML
标记和属性都是大小写敏感的。
¨
任何枚举的属性值也是大小写敏感的。
页面和卡片
¨
WML
是
XML
语言的子集。
¨
一个
WML
应用是由许多页面(
Deck
)所组成的。一个
WML
的页面就相当于
HTML
的一页。
¨
一个
WML
页面是由文件声明和
WML
标记对组成。
¨
WML
标记对中间有一个或多个卡片组成。
¨
WML
就是在各个卡片之间转换和传递信息。
WML
标记对
¨
WML
标记对是任何一个
WML
页面的根元素。
¨
WML
标记对中可以包含一个或多个卡片,和可选的头元素。
¨
WML
标记对中可以使用可选的“模板”来生成其所包含的所有卡片。
WML
例子
<wml>
<card>
<p>
<do type=”accept”>
<go href=”#card2”/>
</do>
Hello world !
This is the first card…
</p>
</card>
<card id=”card2”>
<p>
This is the second card.
Goodbye
</p>
</card>
</wml>
文件声明
¨
XML
声明总是在文件的第一行。
<?xml version=”1.0”?>
¨
DOCTYPE
声明。
<!DOCTYPE WML PUBLIC “-//WAPFORUM//DTD WML1.1//EN” http://www.wapforum.org/DTD/wml_1.1.xml>
事件与导航
¨
导航与事件处理:
1.
WML
包括导航和事件处理模块。
2.
WML
允许作者指定需要处理的事件。
3.
事件可以和所需要完成的任务捆绑在一起。
4.
URL
导航就是这样的一个例子。
5.
事件捆绑是通过几种元素声明来完成的,包括:
go
、
do
和
onevent
。
6.
Do
元素比
Go
元素需要用户更多的参与。
Do
元素
¨
Do
元素提供了一个通用的事件处理机制,使得用户可以参与当前卡片的事件处理。
¨
WML
提供一些预先定义的
Do
模块。
¨
accept
:确定(或接受)。
¨
prev
:返回到上次的位置。
¨
help
:请求帮助。
¨
options
:上下文敏感的选项请求。
<do type=”options” name=”do1” label=”options”>
<go href=”/options”/>
</do>
任务
¨
Go
元素——当用户选中该元素时,就引导用户去
WML
中指定
URL
。
<go href=http://www.mot.com.wireless.wml>Motorola Wireless</go>
¨
Prev
元素——当用户选中该元素时,就引导用户去上次用户访问过的
URL
。
<do type=”options” name=”do1” label=”default”>
</prev>
</do>
¨
Refresh
元素——当用户选中该元素时,变量值将被重新设置。
<do type=”refresh”>
<refresh>
<setvar name=”firstname” value=”david”>
<setvar name=”lastname” value=”smith”>
<setvar name=”age” value=”29”>
</refresh>
</do>
Setvar
元素
¨
指定在当前的上下文中的变量的值,从侧面影响正在运行的任务。
¨
必须使用
name
属性指定变量的名字。
¨
必须使用
value
属性指定所需要赋给变量的值。
Select
元素和
Option
元素
¨
Select
元素和
Option
元素是用来在
WML
中形成选择任务。
¨
Option
元素可以指定在用户作出选择后的目标地址。
<select name=”type”>
<option value=”boxed” onpick=”#selectBoxed”>boxed</option>
<option value=”arranged” onpick=”selectArranged”>arranged</option>
</select>
Input
元素
¨
Input
元素是用来收集用户的输入。
1.
name
属性是用来指定变量的名字。
2.
value
属性可以指定变量缺省的值。
<input name=”firstname” type=”text” value=”Robert” format=”*A” maxlength=”32”/>
<input type=”text” name=”age” format=”*N”/>
<input type=”text” name=”address” format=”*M”/>
<input type=”password” name=”password”/>
3.
type
属性可以用来指定按密码输入模式进行输入,否则就是普通的文本输入模式。
4.
format
属性用来指定输入的内容是数字(
N
)、字母、字母和数字,输入长度,大写或者小写等等。
Text
元素
¨
段落:
<p></p>
(自动换行模式切换)
¨
空白:空格、制表符和换行都将被显示为空白。
¨
重点:
em
(强调),
strong
(特别强调),
i
(斜体),
u
(下划线),
big
(预定义的大字体),
small
(预定义的小字体)。
¨
br
元素:建立新的一行。
<p>
<b>
Welcome to…
</b>
<strong><i>
Mobile
</i></strong>
<u>
ADK
</u>
</p>
超级链接
¨
a
元素和
anchor
元素被用来创建一个超级链接。选中该元素的时候,用户将被带入到链接的地址(可以是另外的页面或者是同一页面下的不同卡片)。
¨
也可以不使用
a
元素和
anchor
元素,而采用
go
元素中的
href
属性来创建一个超级链接。
1
.
<anchor>follow me
<go href=”destination”/>
</anchor>
2
.
<a href=”destination”>follow me</a>
3
.
<do type=”accept” label=”ACCEPT”>
<go href=”http://www.abc.com/yourcode” method=”post”>
<postfield name=”w” value=”12”>
<postfield name=”password” value=”your password”/>
</go>
</do>
Timer
元素
¨
Timer
可以用来延时显示页面或卡片,或在页面和卡片间实现切换以取得动画效果。
¨
下面的例子就是在显示“
Hello World
”五秒钟后,用户将被自动引导至
“/next”
所指定的位置:
<wml>
<card ontimer=”/next”>
<timer value=”50”/>
<p>
Hello World !
</p>
</card>
</wml>
注释
¨
简单的注释(单行或多行,注释中没有
WML
标记)。
<!—Put simple comment here -->
¨
使用
CDATA
标记来实现带有
WML
标记的注释。
<![CDATA[lot of stuff here <b>bold text</b>…
…
<table column=”2”>…</table> still lot more
…
]]>
Template
元素
¨
Template
元素声明一个在页面中所有卡片都可以使用的事件处理模块。
1.
模块中的事件处理将自动应用于同一页面中的所有卡片。
2.
某个卡片可以通过定义同名的事件处理来替代模块中的事件处理。
<wml>
<template>
<do type=”options” name=”do1” label=”default”>
<prev/>
</do>
</template>
<card id=”first”>
<!—
该卡片将自动套用模块中定义的事件处理过程
-->
…
</card>
<card id=”second”>
<!—
该卡片将使用空操作(
noop
)来替代模块中定义的事件处理过程,那么就等价于该卡片中没有该事件处理过程
—>
<do type=”options” name=”do1”>
<noop/>
</do>
…
</card>
<card id=”third”>
<!—
该卡片使用同名的事件处理替代模块中提供的事件处理
—>
<do type=”options” name=”do1” label=”options>
<go href=”/options”/>
</do>
</card>
</wml>
Table
元素
¨
Table
元素是用来创建能容纳文本和图片的表格。
1.
align
属性是用来指定对齐的方式(
”L”
是左对齐,
”C”
是对中,
”R”
是右对齐。缺省的对齐方式是从左到右的左对齐方式)。
<table columns=”2”>
<tr><td>One</td><td>Two</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>BA</td><td>B</td></tr>
</table>
2.
tr
元素用来指定表格的行。
3.
td
元素用来指定表格的列。
<table columns=”2”>
<tr><td>One</td><td>Two</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>BA</td><td>B</td></tr>
</table>
图标
¨
alt
属性指定可选的文本,当设备不能显示图象的时候。
¨
src
属性指定图象的来源。
¨
align
属性指定图象与相临的文本对齐。
<p>
<img alt=”MOTOROLA” src=”http://ni-icsd/genevaw/logo.gif”/><br/>
Telecom 99
</p>
Postfield
元素
¨
指定向原始服务器指定提交时候的参数名字和参数数值。
1.
Login
和
Password
效验是最常用提交。
2.
一个使用
go
元素的提交例子。
<go href=”http://193.120.145.194:80/wap” methos=”post”>
<postfield name=”LI” value=”$LI”/>
<postfiels name=”PV” value=”$PV”/>
</go>
事件
¨
ontimer
事件:该事件发生在计时器过期的时候。
¨
onenterforward
事件:该事件发生在用户选中一个有效的
URL
之后,在正式引导用户去该
URL
地址之前。
¨
onenterbackward
事件:该时间发生在用户选中一个有效的
Prev
操作之后,在正式引导用户之前。
¨
onpick
事件:该事件发生在用户选中某个选项。
<card>
<onevent type=”onenterforward”>
<go href=”/url_to_check_security”/>
</onevent>
<p>
Help
</p>
</card>
<card onenterforward=”/url_to_check_security”/>
<p>
Hello
</p>
</card>
WML
核心数据类型
¨
长度
1.
可以用整数指定画布(屏幕、纸张)的像素大小,或者用百分数表示占用的长度或宽度。
2.
“
50
”
=50
个像素。
3.
“
50%
”
=
占用一半的位置。
4.
只能用在属性值中。
ID
和
Class
属性
¨
所有的
WML
元素有两个核心属性:
id
和
class
。
¨
这两个属性被用于服务器方的信息传输。
¨
id
提供某个元素在页面中唯一的名字。
¨
class
接收元素一个更多的
class
定义。
¨
多个元素可以使用同一个
class
定义。
¨
class
的名字是大小写敏感的。
¨
元素也可以作为
class
中的一个部分。
WML
编程指导
¨
尽量是用户的操作简单、友好。
1.
建立一个操作流程图。
2.
定义每个卡片的操作。
3.
保持每个卡片小而且简单。
4.
尽量减少按键的次数。
5.
不要使用
WML
所有的属性(各个厂家对
WML
兼容情况是不同的)。
创建一个新的
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=”card_name” title=”title_name”>
<!—write your code here-->
</card>
</wml>
修改卡片
¨
根据自己的需要改变卡片的
id
和
title
。
¨
增加卡片的内容。
<?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=”welcome” title=”welcome”>
<p>
MADK WML DEMO.
</p>
</card>
</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=”welcome” title=”welcome”>
<do type=”accept”>
<go href=”#greeting”/>
</do>
<p>
MADK WML DEMO.
</p>
</card>
<card id=”greeting”>
<p>
Welcome to the wireless bookshop.
</p>
</card>
</wml>
建立一个动画消息
<card id=”greeting” ontimer=”#card2” title=”Toolkit Demo”>
<timer value=”30”/>
<p>
<big>
Welcome to…
</big>
</p>
</card>
<card id=”card2” ontimer=”#card3” title=”Toolkit Demo”>
<timer value=”30”/>
<p>
<b>
the Wonderful
</b>
<u>
Wireless
</u>
</p>
</card>
<card id=”card3” title=”Toolkit Demo”>
<p>
<big><i>
Bookstore.
</i></big>
</p>
</card>
建立选择列表
<card id=”card3” title=”Toolkit Demo”>
<do type=”accept”>
<go href=”#collectBookType”/>
</do>
<p>
<b><i>
BookStore.
</i></b>
</p>
</card>
<card id=”collectBookType”>
<p>
Science or novel:
<select name=”type”>
<option value=”science” onpick=”#science”>Science</option>
<option value=”novel” onpick=”#novel”>novel</option>
</select>
</p>
</card>
更多的选择
<card id=”science”>
<p>
select science title:
<select name=”productID”>
<option value=”universe” onpick=”#price”>The Universe</option>
<option value=”space” onpick=”#price”>Facts About Space</option>
<option value=”time” onpick=”#price”>Time Machine</option>
</select>
</p>
</card>
<card id=”novel”>
<p>
select novel title:
<select name=”title”>
<option value=”speed” onpick=”#price”>Speed</option>
<option value=”terminator” onpick=”#price”>Terminator</option>
<option value=”ghost” onpick=”#price”>Ghost</option>
</select>
</p>
</card>
Scrollbar
与
Setvar
<card id=”price”>
<do type=”accept”>
<go href=”#copies>
<setvar name=”price” value=”30.0”/>
<setvar name=”discount” value=”0.00”/>
</go>
</do>
<p>
Click accept to find the
Price and enter number of copies you need:
</p>
</card>
使用
Input
¨
使用正确的格式。
¨
选择一个合适的标题。
¨
限制所输入内容的最大长度。
<card id=”copies”>
<do type=”accept”>
<go href=”#collectName”/>
</do>
<p>
select number of copies:
<input name=”uint” title=”No Of Copies’ format=”*N” maxlength=”9”/>
</p>
</card>
¨
收集名字
<card id=”collectName”>
<do type=”accept”>
<go href=”#collectAddress”/>
</do>
<p>
name:
<input name=”fullName” title=”Full Name” format=”*A” maxlength=”9”/>
</p>
</card>
¨
收集地址
<card id=”collectAddress>
<do type=”accept”>
<go href=”#cardType”>
<setvar name=”ship” value=”4.0”/>
</go>
</do>
<p>
address:
<input name=”address” title=”Address” format=”*M” maxlength=”9”/>
</p>
</card>
选择信用卡类型
<card id=”cardType”>
<p>
what kind of credit card?
<select name=”creditCardType”>
<option value=”visa” onpick=”#cardNo”>visa</option>
<option value=”mastercard” onpick=”#cardNo”>mastercard</option>
<option value=”discover” onpick=”#cardNo”>dicover</option>
</select>
</p>
</card>
输入信用卡号码
<card id=”cardNo”>
<do type=”accept”>
<go href=”#cardDate”/>
</do>
<p>
card number
<input name=”cardNumber” title=”Card Number” format=”*N” maxlength=”16”/>
</p>
</card>
信用卡过期日期
<card id=”cardDate”>
<do type=”accept”>
<go href=”#confirmation”/>
</do>
<p>
expiration date
<input name=”creditCardExp” title=”Expiration Date” format=”*N” maxlength=”8”/>
</p>
</card>
确认
<card id=”confirmation”>
<p>
Each is $$ $(price), you ordered $(unint) copies,
Shipping is $$ $(ship), and total is $$64,
Thank you ! Bye Bye !
</p>
</card>
复合卡片的应用
<card id=”collectAddress”>
<do tyoe=”accept”>
<go href=”card.wml#cardType”>
<setvar name=”ship” value=”4.0”/>
</go>
</do>
<p>
address:
<input name=”address” title=”Address” format=”*M”/>
</p>
</card>
复合站点的应用
<card id=”collectAddress”>
<do type=”accept”>
<go href=”http://www.abc.com/wml/card.wml#cardType”>
<setvar name=”ship” value=”4.0”/>
</go>
</do>
<p>
address:
<input name=”address” title=”Address” format=”*M”/>
</p>
</card>
调用
WMLScript
函数
<card id=”confirmation”>
<do type=”accept” label=”Calculate”>
<go href=”calculateTotal.wmls#calculateTotal($(price),$(unit),$(ship))”/>
</do>
<p>
Each is $$ $(price),
You ordered $(unit) copies,
Shipping is $$ $(ship), and
Total is $$ $(total)
</p>
</card>
WMLScript
例子
//wml script used by book store application
extern function calculateTotal(a,b,c)
{
//a: unit price
//b: number of units
//c: shipping charges
var total=a*b+c;
WMLBrowser.setVar(“total”,total);
WMLBrowser.refresh();
}
WBMP
格式
经过仔细地研究,发现
WBMP的格式如下(例如Width=16,Height=15的一个白色的画面):
0x00,0x00,0x10,0x0f,0xff,0xff......,0xff。
头两个字节为0,现在还不清楚它的用途。
第三个字节为Width,第四个字节为Height,后面的是数据。
数据有以下特点:用一个Bit对应一个Pixel。0表示黑色,1表示白色。高位开始到底位结束对应着从左到右,数据从低地址到高地址对应着从上到下。一个字节可以表示8个像素,不足的部分可以用0补齐。
下面是一张太阳的图片,仅供参考。
0x00,0x00,//Unknown or reserved,maybe the mark for the wbmp
0x14,//Width
0x14,//Height
//Pixel data
0xfa,0xf5,0xf0,0xfb,0x6d,0xf0,0xfb,0xad,0xf0,0xfb,
0xdd,0x80,0x1b,0xfc,0x70,0xe7,0x1f,0xe0,0x7c,0xe7,
0xd0,0xbb,0xfb,0xd0,0xdb,0xfb,0xb0,0xd7,0xfd,0x70,
0xb7,0xfd,0xb0,0x77,0xf5,0xd0,0xfb,0xeb,0xe0,0xfb,
0xdb,0xf0,0x1c,0xe7,0x80,0xc7,0x1c,0x70,0xf7,0xfd,
0xf0,0xf7,0xbf,0xf0,0xf6,0x5d,0xf0,0xf5,0xed,0xf0
因此在知道了WBMP的格式后,就可以在WAP移动设备上做出各种图形,甚至是绘图。本来WAP终端设备一般是不支持图形模式,但是可以在服务端将所有的图形按照WBMP的格式准备好再送往WAP终端设备,那么看起来就好象在WAP终端设备上直接绘图。大家可以去
http://www.infoislive.com/demo
看看。
使用ASP实现WML
<%@ Language=VBScript %>
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="MainCard" title="Yestock">
<p mode="nowrap">
Yestock<br/>
<select>
<option onpick="http://202.96.168.13/wap/Chinese.wml">
中文
</option>
<option onpick="http://202.96.168.13/wap/English.wml">English</option>
</select>
</p>
</card>
</wml>
注意:在
<% Response.ContentType=”text/vnd.wap.wml” %>
后面一定要紧接
<?xml version=”1.0” encoding=”gb2312”?>
。两者间不能有空格和回车。否则在
WinWAP
上可以浏览,但在
WAP
移动设备上就行不通!
解决
WAP
中文问题
WML
是
XML
的一种应用,而
XML
的缺省编码是
UTF-8
,也就是
Unicode
的
8
位编码方式。如果不特殊说明,那么
XML
将认为你采用的是
UTF-8
的编码方式。这就造成了一个问题,我们通常使用
GB2312
编码方式,几乎所有的文档内容都采用了
GB2312
方式,数据库中也不例外。而
Unicode
和
GB2312
的编码有很大的不同,可以说根本不一样,这是造成乱码的原因。
任何编码方式包括什么日文,韩文,希腊文,阿拉伯文等都能轻松转换成
Unicode
,你可以在同一段文档中加入
N
种语言。虽然现有的应用软件很少采用
Unicode
,但
Windows NT
的内核却采用
Unicode
来处理字符。
Unicode
方式有两个吸引人的个性:独立且宽容。
如何解决这些问题,现在主要有以下的几种方法:
方法一:直接采用
UTF-8
编码
方法二:直接采用
GB2312
编码
方法三:采用字符转换的方式
方法四:配置你的应用服务直接输出
UTF-8
编码
(
适用于
IIS)
下面具体来讲一下这几种方法
:
方法一:直接采用
UTF-8
编码
这种方法无需多讲。如果你的内容可以轻易转换到
UTF-8
编码还需要什么呢?
坏处:需要对你的服务内容全面的转换,而且与现有的大多数应用不兼容。
方法二:直接采用
GB2312
编码
也很简单,在你的编码声明时,标注采用
GB2312
编码方式,具体做法如下,
<?xml version="1.0" encoding="GB2312"?>
Motorolar L2000www
和
Nokia 7110
都支持该种方式
。
坏处:有些终端不支持
GB2312
编码,仍然会有乱码。
方法三:采用字符转换的方式
“
天下火力
”转换成中文。其思想是用
ASCII
字符表现更大字符集中的字符。比如你要展现希腊文的小写的
alpha
。
alpha
在
Unicode
的编码中是
945
,
16
进制就是
3B1
,于是你写下
“
α
”或者“
α
”
显示的就是小写的
alpha
α
。你只需要知道汉字的
Unicode
编码,将其转换成“
&#xXXXX;
”的形式。你只要用
ASCII
编码方式就行了,任何平台都能处理,而且
HTML
也支持。本文中蓝色的天下火力就是用这种方式写的。如果你看不到,表示你的浏览器不支持这种方式。
坏处:增加了文件长度,使得带宽本来还不高的无限互连网更慢;不能直观的看到中文,万一手一抖后果不堪设想。
方法四:配置你的应用服务直接输出
UTF-8
编码
(
适用于
IIS)
在
IIS
的
Response Object
有一个属性
CharSet,
按微软的说法只要这么做就行:
<% Response.Charset("UTF-8") %>
坏处:这种方法,只适用于
Windows NT
下
IIS
的
ASP
编程。其他的平台和
Web Server
有没有如此简单的方式。
WML
标记的速查表
Element
|
Syntax
|
<wml>
|
<wml xml:lang="lang" >
content
</wml>
|
<card>
|
<card id="name"
title="label"
newcontext="boolean"
style="style"
onenterforward="url"
onenterbackward="url"
ontimer="url" >
content
</card>
|
<template>
|
<template onenterforward="url"
onenterbackward="url"
ontimer="url" >
content
</template>
|
<head>
|
<head>
content
</head>
|
<access>
|
<access domain="domain"
path="path" />
|
<meta>
|
<meta name="name"|http-equiv="name"
content="value"
forua="true | false" />
|
|
|
Element
|
Syntax
|
<timer>
|
<timer name="variable"
value="value" />
|
|
|
Element
|
Syntax
|
<setvar>
|
<setvar name="name"
value="value" />
|
|
|
Element
|
Syntax
|
<anchor>
|
|
<a>
|
<a title="label" >
task
text
</a>
|
|
|
Element
|
Syntax
|
<do>
|
<do type="type"
label="label"
name="name"
optional="boolean" >
task
</do>
|
<onevent>
|
<onevent type="type" >
task
</onevent>
|
|
|
Element
|
Syntax
|
<go>
|
<go href="url"
sendreferer="boolean"
method="method"
accept-charset="charset"
content
</go>
|
<prev>
|
<prev>
content
</prev>
|
<noop>
|
<noop/>
|
<refresh>
|
<refresh>
content
</refresh>
|
|
|
Element
|
Syntax
|
<img>
|
<img alt="text"
src="url"
localsrc="icon"
align="alignment"
height="n"
width="n"
vspace="n"
hspace="n" />
|
|
|
Element
|
Syntax
|
<input>
|
<input name="variable"
title="label"
type="type"
value="value"
default="default"
format="specifier"
emptyok="boolean"
size="n"
maxlength="n"
tabindex="n" />
|
<select>
|
<select title="label"
multiple="boolean"
name="variable"
default="default"
iname="index_var"
ivalue="default"
tabindex="n" >
content
</select>
|
<option>
|
<option title="label"
value="value"
onpick="url" >
content
</option>
|
<optgroup>
|
<optgroup title="label" >
content
</optgroup>
|
<fieldset>
|
<fieldset title="label">
content
</fieldset>
|
|
|
Element
|
Syntax
|
<b>
|
<b>
text
</b>
|
<big>
|
<big>
text
</big>
|
<br>
|
<br/>
|
<em>
|
<em>
text
</em>
|
<i>
|
<i>
text
</i>
|
<p>
|
<p align="alignment"
mode="wrapmode" />
|
<small>
|
<small>
text
</small>
|
<strong>
|
<strong>
text
</strong>
|
<table>
|
<table align="alignment"
title="label"
columns="n"/>
|
<td>
|
<td>content</td>
|
<tr>
|
<tr>
<td>content</td>
</tr>
|
<u>
|
<u>
text
</u>
|
|
|
Element
|
Display character
|
<
|
< (less than)
|
>
|
> (greater than)
|
'
|
' (apostrophe)
|
"
|
" (quote)
|
&
|
& (ampersand)
|
$$
|
$ (dollar sign)
|
|
Non-breaking space
|
­
|
Soft hyphen
|
|
posted on 2006-05-09 09:43
kelven 阅读(610)
评论(0) 编辑 收藏 所属分类:
WML