打印

制作WAP留言本[ASP教程]

【测试地址】:http://wap.blueidea.com/tutorial/wapguestbook/
后台管理地址:http://wap.blueidea.com/tutorial/wapguestbook/admin.asp

请大家测试的时候不要输入非法和反动信息,否则我就只有删掉测试文件了,谢谢大家的配合。

测试工具:WAP模拟器(如Opera,M3GATE,等),支持WAP的手机。

一直以来都有朋友在WAP的中文变量传递上面遇到问题,这里给出简单的WAP留言本的制作过程,也解决了WAP的中文传递问题。

WAP网站也和传统网站类似,同样是PC电脑来进行后台的管理。只是不同的是一个是用手机浏览,一个是用电脑浏览。前台显示页面用手机浏览,后台管理页面用IE浏览器进行查看,管理就可以了。

如果你已经能写简单的留言本程序,那么制作WAP留言本已经很简单的事情了,只是把HTML换成WML这么简单,至于WML的语法,看看教程就会了,比HTML还简单,具体教程google一下。

一些WAP教程。
http://www.itsalon.net/wap/
http://www.wapease.com/class/tip2/
http://tech.sina.com.cn/wap/school/index.shtml
其他就自己找找吧。

留言本的程序包括:发贴,保存,显示,编辑,回复,删除。

整个的后台管理+前台显示,也就这几个功能。

注意:以下代码,如果你是使用EditPlus编写的,请在保存的时候选择,另存为“UTF-8”编码。如果不这么做,你就会遇到WML中传递中文变量,出现乱码的问题了。





以ASP为例。那我们就先从发贴页面做起,add.asp

指定ASP页面所用的脚本和编码,CODEPAGE="65001"这个一定不能少,是表示UTF-8编码,GB2312是CODEPAGE="936"。
复制内容到剪贴板
代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
先声名WML的头文件信息,这样即使你用的是虚拟的空间,也不用在IIS或者是Apache里面映射MIME文件类型。
复制内容到剪贴板
代码:
<% Response.ContentType="text/vnd.wap.wml;charset=UTF-8" %>
声名WML的头文件信息,这个是规定,规定了WAP的版本和采用的标准,如果不明白就这么写就行了,不变的,但是必须要加上。 其中encoding也是指定编码。
复制内容到剪贴板
代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
接下来就是页面的显示代码了
复制内容到剪贴板
代码:
<card id="add" title="经典WAP留言本">
<p>
昵称:<br/>
<input name="Name" emptyok="false" size="10" maxlength="10"/><br/>
标题:<br/>
<input name="Title" emptyok="false" maxlength="40"/><br/>
内容:<br/>
<input name="Content" format="false" maxlength="150"/><br/>
</p>
</card>
简单介绍一下:wml类似html标签,card代表一个卡片,这里简单理解为一个页面就行了,注意:所有的显示的内容都要放在<p> </p>标签里面,一定要注意这点,要不然就会出错。
复制内容到剪贴板
代码:
<meta http-equiv="Cache-Control" content="max-age=0"/>
<meta http-equiv="Cache-Control" content="no-cache"/>
在meta中指定不缓存页面。
复制内容到剪贴板
代码:
<input name="Title" emptyok="false" maxlength="40"/><br/>
emptyok不允许为空,maxlength允许输入的文字最大长度。

WML的表单提交有点不同,<postfile name="title" value="($title:n)" />是把input表单的值附给title变量,name="title" 是变量名, value="($title:n)"是变量,即input中输入的信息,content也是一样。

注:这里($title:n)是WML变量的写法,以$符号开头,类似PHP的变量声名,WML中表单提交有:n,:e,:u,和空,四种状态,其中:n是强制不进行URL转义;:e是转义;:u是反转义;如果为空,在有的手机上默认是不转义,有的是转义, 规范不统一,安全期间,如果不转义,还是写上:n为好。

WAP的变量提交也分两种情况,GET和POST,使用GET方法,对中文的支持并不是很好,所以有使用到表单提交的地方,都改为POST方式提交,代码格式为:
复制内容到剪贴板
代码:
<anchor>POST方式提交
<go href="save.asp" method="post">
<postfield name="Name" value="$(Name:n)" />
<postfield name="Title" value="$(Title:n)" />
<postfield name="Content" value="$(Content:n)" />
<postfield name="Method" value="POST" />
</go>
</anchor>
当然对于英文和数字,简单的,使用GET方式提交会比较方便一些,代码格式为:
复制内容到剪贴板
代码:
<a href="save.asp?Name=$(Name:n)&amp;Title=$(Title:n)&amp;Content=$(Content:n)&amp;Method=GET">GET方式提交</a>
注:连接不同变量字符的&符号要写为&

发表留言页面add.asp的代码如下:

 提示:您可以先修改部分代码再运行
接下来是保存数据。


保存页面save.asp,代码如下:

 提示:您可以先修改部分代码再运行
最后是显示把留言的内容显示出来。

显示数据的时候需要注意字符的替换,因为有些字符是不能直接显示的,需要转换为Ascii码,在WML里面“$”符号是表示变量,如果要显示“$”,需要写为“$$”,例:“一共有$$315元RMB”,显示为“一共有$315元RMB”。

必须要替换的字符,已经写为函数,方便大家使用。
复制内容到剪贴板
代码:
Function outHTM(str)
' 把字符串进行HTM解码,输出字符串
Dim sTemp
sTemp = str
outHTM = ""
If IsNull(sTemp) Then
Exit Function
End If
sTemp = Replace(sTemp, "&#39;", "'") '还原单引号
sTemp = Replace(sTemp, "&", "&amp;")
sTemp = Replace(sTemp, "<", "&lt;")
sTemp = Replace(sTemp, ">", "&gt;")
sTemp = Replace(sTemp, "$", "$$")
sTemp = Replace(sTemp, "", "&nbsp;")
sTemp = Replace(sTemp, Chr(10), "<br/>")
outHTM = sTemp
End Function
显示留言的页面index.asp,代码如下:

 提示:您可以先修改部分代码再运行
后台管理页面admin.asp,代码如下:

 提示:您可以先修改部分代码再运行
连接数据库conn.asp,代码如下:

 提示:您可以先修改部分代码再运行

源码下载地址:点击下载


其他说明:有任何疑问,请访问:http://www.designer5.net
蓝色理想论坛WAP版:http://www.blueidea.com/bbs
广告:蓝色理想WAP网站改版了,使用手机访问http://wap.blueidea.com
如果您参考了此程序,有WAP站点,请做上http://wap.blueidea.com的链接。

TOP

很棒啊!非常适合我们这些初学者,楼主真是太贴心啦!
顶一下!
为什么我不能大声说~爱你!

TOP

不错!现在正有这个问题!
顺便问一下!我用的是utf-8编程!想传一个user数据变量,它是由<%=rs("user")%>而且用utf-8转换函数,遇见中文就不行了!譬如:<a href="show.asp?user=fonter">作者</a>就可以,但:<a href="show.asp?user=黑雨">就不可以,在show.asp中用user=request("user")接收变量,并且用user筛选数据库!如何把utf-8转换成可以用于搜索数据库的!
MY xhtml blog : blog.myairchannel.com

TOP

不能这么直接在链接上面写中文

<a href="show.asp?user=黑雨">

可以<input name="user"/>
<a href="show.asp?user=($user:n)">
在input中输入中文,链接中写上($user:n)

链接上面中文的都是被编码过的
如“黑雨”表示为:%E9%BB%91%E9%9B%A8
javascript中的 escape("黑雨")函数,可以试试

<a href="show.asp?user=($user:n)">
这样提交
直接接收就可以了 Request("user")

TOP

我加了循环那不是有多个<input>这样不行吧!用UTF-8转换GB2312函数也不行,请问版主变量的几和方式有什么不同如($user:n)($user:e)
MY xhtml blog : blog.myairchannel.com

TOP

可惜我已经放弃了asp,改投php了!
不过还是收藏了,说不定什么时候就由用了。谢谢楼主!
冰古blog

中文wordpress blogs大集合:Come on, add yours!

TOP

恩,好帖,是个WAP入门的好教程

TOP

fonter在上个帖子中说
引用:
我加了循环那不是有多个<input>这样不行吧!用UTF-8转换GB2312函数也不行,请问版主变量的几和方式有什么不同如($user:n)($user:e)
($user:n)不进行URL转义

($user:e)进行URL的转义

($user:u)进行URL的转义

变量值在被替换之前要经过URL转义。

URL转义:使用一个转义序列(由一个%后面跟十六进制数字所组成)来替换变量值中特定的字符,空格字符都替换为+。
注意,经过此过程称为URL转义,但该值不一定是URL:可以使用任何字符串。

TOP

谢谢版主!!!!!实学到好多东东!鼓励一下!
   再有几个问题!
   1、我在M3GATE0.6版可以做中文提交!不过到了M3GATE1.2版就不可以了,会出现????,请问用那个版本开发更适合现在的大众手机!
   2、在用M3GATE1.2版不能登陆,会出现错误!而在0.6版本就不会!但1。6版不用输入!·#等这些符号!
   3、请问有没有图片与文章乱排的调用函数!
MY xhtml blog : blog.myairchannel.com

TOP

我一直是用的M3GATE 0.6版本的,1.2的没用过
至于平时测试,可以用Opera8来测试,再配合M3GATE就可以了
个人感觉Opera的报错详细一些,当然M3GATE更严谨一些,配合使用就可以了

至于你说的登录,是表单输入?
可以访问 wap.blueidea.com 留言本试试你说的情况

图文并茂的WAP网站,和做普通是一样的,只是<img 标签要闭合,所能用的属性比较少而已。

TOP

   我用OPERA8在本地键入http://localhost/ecshy/wap/index.asp  测试出现:

   该服务器所需的登录验证方法不被支持。
   您试图访问的地址 http://localhost/ecshy/wap/index.asp 目前不可用。请确保网址(URL)拼写和标点符号使用都正确,然后试着重新装入页面。

   请问版主如何设置!我在本地的IIS以设了MIME了。用WINWAP也是出现登录验证对话框!
MY xhtml blog : blog.myairchannel.com

TOP

可能是IIS的问题,先设置IIS能访问目录

试试输入http://localhost/ecshy/wap/是否可以访问

TOP

我可保证IIS没有问题!

我试了你的教程!在你的【测试地址】:http://wap.blueidea.com/tutorial/wapguestbook/中!你用<a href="save.asp?Name=$(Name:n)&Title=$(Title:n)&Content=$(Content:n)&Method=GET">GET方式提交</a>可以提交
不过我在本地下用:n就可以提交,不过出现乱码!也报错了!我用:e就可以,没什么问题!我用的是m3gate0.6测试。
现在有点糊涂了!问题好多!
用URL转发一个网址!用m3gate0.6测试,首页可以访问!其它页就不行
还有想要解决一个文章分页问题!图片与文字乱排!可以是可以,不过就是要处理一些特殊符号!于是就也就做罢了!
我的分页程序用winwap好访问很慢!不知如何优化!
各位朋友,在学习中一定学了不少经验!帮助解决一些问题!
MY xhtml blog : blog.myairchannel.com

TOP

自己支持一下!版主再麻烦一下!
MY xhtml blog : blog.myairchannel.com

TOP

对于URL转发问题,我没遇到你说的问题。
比如我有两个页面url.asp和redirect.asp
url.asp有如下链接

<a href="redirect.asp?url=http://wap.blueidea.com">跳转到蓝色理想</a>


redirect.asp有如下内容
<%
Response.redirect Rquest.QueryString("url")
%>
这样就完成了跳转,没有问题的。


至于分页程序,可以借鉴一下DW后台版块的相关分页程序,或者把你的分页帖到DW后台区,询问一下

TOP

我的分页程序如下:
复制内容到剪贴板
代码:
<%
page=cint(request.querystring("page"))
set rs=server.createobject("adodb.recordset")
rs.open "select * from blog order by id desc",conn,1,1
rs.PageSize=9
if page<=0 then page=1
pages=rs.pagecount
if page > pages then page=pages
rs.AbsolutePage=page
for j=1 to rs.PageSize
title=rs("title")
id=rs("id")
%>
<p>&nbsp;<img src="jian.png" alt=":)"/><a href="blogview.asp?id=<%= rs("id") %>"><%= title %></a></p>
<%
rs.movenext
if rs.eof then exit for
next        
%>
<p>
<%if rs.pagecount<>1 and rs.pagecount<>0 then%>
<br/>
<%if page>rs.pagecount then%>
<a title="确定" href="allblog.asp?Page=<% =page -1 %>">上一页</a>
<%else%>
<%if page<>1 then %>
<a title="确定" href="allblog.asp?Page=<% =page -1 %>">上一页</a><br/>
<% end if %>
<a title="确定" href="allblog.asp?Page=<% = page + 1%>">下一页</a>
<%end if
end if
%>
</p>
<p><input name="goto" title="goto" value="<%=page%>" format="*N"/>第<%=page%>页/共<%=rs.pagecount%>页</p>
<p>
<anchor title="确定">Goto
<go href="allblog.asp" method="get">
<postfield name="page" value="$(goto)"/>
</go>
</anchor>
</p>
这个在上网下能WINWAP浏览,但很慢,而本地不可以链接上
MY xhtml blog : blog.myairchannel.com

TOP

WAP 很有发展空间吗?

TOP

菜鸟求救呀!~~急

我在做新闻数据库的时候主页能用到了修改 ,管理等后面的时候只要一用数据库里的数据
在预览的时候上面就会出错我问了别人一下他说数据库要设一下权限我就设了结果还是不行知道的给点一下谢谢(可能写的不太清楚)

TOP

怎么回事呀,我直接下载了源代码,然后上传到服务器,怎么不正常呀,帮帮我!!http://boys.8801.net
小宇

TOP

太好了,我要顶
昵称:网络浪子
QQ:422187220 email:woaccon@163.com
一切尽在掌握中,相信我,没错的!

TOP

我下了试了一下,为什么还是不能用中文留言呢,不是乱码就是空值.请高手指点一下,能不能弄个运行没问题(能正常将中文加入数据库,并且能调出正确显示)的源码来学学呀.
呵呵,麻烦了,各位高手!!

请多多帮忙!!
昵称:网络浪子
QQ:422187220 email:woaccon@163.com
一切尽在掌握中,相信我,没错的!

TOP

楼主,这个代码真的完全解决了中文提交的问题了吗?

TOP

我试了一下,好像没有什么问题,大家有没有发现什么问题,提出来大家一起研究一下

TOP

谢谢楼主啊,这是我人生的转折点啊!!!
`
h tt p://wap.wmcc.cn/
`

TOP

很不错啊 正需要这方面的资料

TOP

我下载了这个WAP留言板,可换成数据库SQL server2000就出错(只更换了连接数据库代码,其他的都没动过),请问什么一回事情,到底问题出在什么地方
先谢谢了

TOP

教程挺不错的,支持!
我本身目前也在做WAP,不过是PHP的。

我觉得你在输出帖子的时候可以不用再转换回来原来符号了吧,再说像单引号或者双引号有时还会导致浏览器解析WML时出错。
经典外在,精彩内在
以爱立信,以信致远

TOP

不会

TOP

为什么在模拟器里打开,全是乱码

TOP