浏览模式: 标准 | 列表分类:网站|ASP备忘

ASP延迟的小技巧

我的需求:
在进行了更新等操作后,经过提示页面,延迟2秒,回到原来操作的页面(更新过的)
重点在提示页面“OK.ASP”。界面如下

点击在新窗口中浏览此图片

程序:
代码:

……
<%
dim come
come=Request.QueryString("come")
%>
<meta   http-equiv=refresh   content="2;   url=<%=come%>">
<title>后台管理</title>
<style type="text/css">
……

操作页面在操作完成后 response.Redirect "ok.asp?come=操作页"

如果只是想要第次加载的页面都是重新读取的最近页面,可以用禁止页面的缓存来实现,页面只要打开就必须更新一次数据,而不是保持原有的数据不变,相当于刷新了一次。

"////////////以下禁止缓存模块加在页面的开始//////////////////////
<%
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
%>

Tags: ASP延迟, 禁止缓存

精妙SQL语句,基础,提升,技巧

一、基础

1、说明:创建数据库
Cr&#101;ate DATABASE database-name
2、说明:删除数据库
dro&#112; database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice "disk", "testBack", "c:\mssql7backup\MyNwind_1.dat"
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
cr&#101;ate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:cr&#101;ate table tab_new like tab_old (使用旧表创建新表)
B:cr&#101;ate table tab_new as sel&#101;ct col1,col2… from tab_old definition only
5、说明:删除新表
dro&#112; table tabname
6、说明:增加一个列
Alt&#101;r table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alt&#101;r table tabname add primary key(col)
说明:删除主键: Alt&#101;r table tabname dro&#112; primary key(col)
8、说明:创建索引:cr&#101;ate [unique] index idxname on tabname(col….)
删除索引:dro&#112; index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:cr&#101;ate view viewname as sel&#101;ct statement
删除视图:dro&#112; view viewname
10、说明:几个简单的基本的sql语句
选择:sel&#101;ct * from table1 wh&#101;re 范围
插入:ins&#101;rt into table1(field1,field2) values(value1,value2)
删除:del&#101;te from table1 wh&#101;re 范围
更新:up&#100;ate table1 set field1=value1 wh&#101;re 范围
查找:sel&#101;ct * from table1 wh&#101;re field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:sel&#101;ct * from table1 o&#114;der by field1,field2 [desc]
总数:sel&#101;ct count as totalcount from table1
求和:sel&#101;ct sum(field1) as sumvalue from table1
平均:sel&#101;ct avg(field1) as avgvalue from table1
最大:sel&#101;ct max(field1) as maxvalue from table1
最小:sel&#101;ct min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: sel&#101;ct a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

二、提升

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:sel&#101;ct * into b from a wh&#101;re 1<>1
法二:sel&#101;ct top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b in ‘具体数据库’ wh&#101;re 条件
例子:..from b in ""&amp;Server.MapPath(".")&amp;"\data.mdb" &amp;"" wh&#101;re..

4、说明:子查询(表名1:a 表名2:b)
sel&#101;ct a,b,c from a wh&#101;re a IN (sel&#101;ct d from b ) 或者: sel&#101;ct a,b,c from a wh&#101;re a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间
sel&#101;ct a.title,a.username,b.adddate from table a,(sel&#101;ct max(adddate) adddate from table wh&#101;re table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)
sel&#101;ct a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )
sel&#101;ct * from (Sel&#101;ct a,b,c FROM a) T wh&#101;re t.a > 1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
sel&#101;ct * from table1 wh&#101;re time between time1 and time2
sel&#101;ct a,b,c, from table1 wh&#101;re a not between 数值1 and 数值2

9、说明:in 的使用方法
sel&#101;ct * from table1 wh&#101;re a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息
del&#101;te from table1 wh&#101;re not exists ( sel&#101;ct * from table2 wh&#101;re table1.field1=table2.field1 )

11、说明:四表联查问题:
sel&#101;ct * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d wh&#101;re .....

12、说明:日程安排提前五分钟提醒
SQL: sel&#101;ct * from 日程安排 wh&#101;re datediff("minute",f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页
sel&#101;ct top 10 b.* from (sel&#101;ct top 20 主键字段,排序字段 from 表名 o&#114;der by 排序字段 desc) a,表名 b wh&#101;re b.主键字段 = a.主键字段 o&#114;der by a.排序字段

14、说明:前10条记录
sel&#101;ct top 10 * form table1 wh&#101;re 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
sel&#101;ct a,b,c from tablename ta wh&#101;re a=(sel&#101;ct max(a) from tablename tb wh&#101;re tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(sel&#101;ct a from tableA ) except (sel&#101;ct a from tableB) except (sel&#101;ct a from tableC)

17、说明:随机取出10条数据
sel&#101;ct top 10 * from tablename o&#114;der by newid()

18、说明:随机选择记录
sel&#101;ct newid()

19、说明:删除重复记录
Del&#101;te from tablename wh&#101;re id not in (sel&#101;ct max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名
sel&#101;ct name from sysobjects wh&#101;re type="U"

21、说明:列出表里的所有的
sel&#101;ct name from syscolumns wh&#101;re id=object_id("TableName")

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似sel&#101;ct 中的case。
sel&#101;ct type,sum(case vender when "A" then pcs else 0 end),sum(case vender when "C" then pcs else 0 end),sum(case vender when "B" then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录
sel&#101;ct top 5 * from (sel&#101;ct top 15 * from table o&#114;der by id asc) table_别名 o&#114;der by id desc

三、技巧

1、1=1,1=2的使用,在SQL语句组合时用的较多

“wh&#101;re 1=1” 是表示选择全部   “wh&#101;re 1=2”全部不选,
如:
if @strWh&#101;re !=""
begin
set @strSQL = "sel&#101;ct count(*) as Total from [" + @tblName + "] wh&#101;re " + @strWh&#101;re
end
else
begin
set @strSQL = "sel&#101;ct count(*) as Total from [" + @tblName + "]"
end

我们可以直接写成
set @strSQL = "sel&#101;ct count(*) as Total from [" + @tblName + "] wh&#101;re 1=1 安定 "+ @strWh&#101;re

2、收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE

3、压缩数据库
dbcc shrinkdatabase(dbname)

4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login "up&#100;ate_one","newname","oldname"
go

5、检查备份集
RESTORE VERIFYONLY from disk="E:\dvbbs.bak"

6、修复数据库
Alt&#101;r DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB("dvbbs",repair_allow_data_loss) WITH TABLOCK
GO
Alt&#101;r DATABASE [dvbbs] SET MULTI_USER
GO

7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
       @MaxMinutes INT,
       @NewSize INT


USE     tablename             -- 要操作的数据库名
Sel&#101;ct  @LogicalFileName = "tablename_log",  -- 日志文件名
@MaxMinutes = 10,               -- Limit on time allowed to wrap log.
       @NewSize = 1                  -- 你想设定的日志文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
Sel&#101;ct @OriginalSize = size
FROM sysfiles
Wh&#101;re name = @LogicalFileName
Sel&#101;ct "Original Size of " + db_name() + " LOG is " +
       CONVERT(VARCHAR(30),@OriginalSize) + " 8K pages o&#114; " +
       CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + "MB"
FROM sysfiles
Wh&#101;re name = @LogicalFileName
Cr&#101;ate TABLE DummyTrans
(DummyColumn char (8000) not null)


DECLARE @Counter   INT,
       @StartTime DATETIME,
       @TruncLog  VARCHAR(255)
Sel&#101;ct  @StartTime = GETDATE(),
       @TruncLog = "BACKUP LOG " + db_name() + " WITH TRUNCATE_ONLY"

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
     AND @OriginalSize = (Sel&#101;ct size FROM sysfiles Wh&#101;re name = @LogicalFileName)  
     AND (@OriginalSize * 8 /1024) > @NewSize  
BEGIN -- Outer loop.
   Sel&#101;ct @Counter = 0
   WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
     BEGIN -- up&#100;ate
       Ins&#101;rt DummyTrans VALUES ("Fill Log")  
       Del&#101;te DummyTrans
       Sel&#101;ct @Counter = @Counter + 1
     END  
   EXEC (@TruncLog)  
END  
Sel&#101;ct "Final Size of " + db_name() + " LOG is " +
       CONVERT(VARCHAR(30),size) + " 8K pages o&#114; " +
       CONVERT(VARCHAR(30),(size*8/1024)) + "MB"
FROM sysfiles
Wh&#101;re name = @LogicalFileName
Dro&#112; TABLE DummyTrans
SET NOCOUNT OFF

8、说明:更改某个表
exec sp_changeobjectowner "tablename","dbo"

9、存储更改全部表

Cr&#101;ate PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS

DECLARE @Name   as NVARCHAR(128)
DECLARE @Owner  as NVARCHAR(128)
DECLARE @OwnerName  as NVARCHAR(128)

DECLARE curObject CURSOR FOR
sel&#101;ct "Name"   = name,
"Owner"   = user_name(uid)
from sysobjects
wh&#101;re user_name(uid)=@OldOwner
o&#114;der by name

OPEN  curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN    
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + "." + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- sel&#101;ct @name,@NewOwner,@OldOwner

FETCH NEXT FROM curObject INTO @Name, @Owner
END

close curObject
deallocate curObject
GO


10、SQL SERVER中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
  ins&#101;rt into test (userid) values(@i)
  set @i=@i+1
end

小记存储过程中经常用到的本周,本月,本年函数
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)

Dateadd(mm,datediff(mm,0,getdate()),0)
Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))

Dateadd(yy,datediff(yy,0,getdate()),0)
Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

上面的SQL代码只是一个时间段
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
就是表示本周时间段.
下面的SQL的条件部分,就是查询时间段在本周范围内的:
Wh&#101;re Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
而在存储过程中
sel&#101;ct @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
sel&#101;ct @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)

Tags: SQL

高效率的GetRows()的使用方法

用它可以大幅提升ASP的效能.
代码:
<%
Set conn = Server.Cr&#101;ateObject("ADODB.Connection")
Set cmd = Server.Cr&#101;ateObject("ADODB.Command")

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &amp; Server.MapPath("db2.mdb")
cmd.ActiveConnection = conn
cmd.CommandText = "Sel&#101;ct * from people o&#114;der by id desc"
Set rs = cmd.Execute
rsArray = rs.GetRows()"Rs.GetRows(N):N代表获取记录数量

For i = 0 To UBound(rsArray, 2)
Response.Write rsArray(0, i)&amp;" | "
Next
%>

10W条记录耗时187.500毫秒,总测试平均值在0.2秒左右

GetRows()方法是将数据从 Recordset 复制到二维数组中,这是一个二维数组,第一个下标标识字段,第二个则标识记录号

所以rsArray = rs.GetRows()
rsArray(0, 0)就表示记录集第一行的第一字段值
rsArray(1, 0)就表示记录集第一行的第二字段值

数组的数据是保存在内存中的,这就从根本上解决了每次显示记录还需向数据库请求的麻烦。

另外,关于GetRows()的详细介绍和用法,淡水河边就不多说了,这里有份内容参考

http://www.51windows.net/p...

http://www.blueidea.com/te...

加个关键词,方便以后查找。关键词:ASP效率。

再比如一个BLOG分类的表 b_cat,结构和数据如下:

ID   |   Title   |  Intro
-----------------------------------------
-----------------------------------------
1    |   新闻   |  这里是新闻
2    |   文章   |  这里是文章
3    |   下载   |  这里是下载

这样表建立好了,数据也有了,下面用GetRows 方法

代码:

Dim Rs_Cat
Dim Arr_Cat
Set Rs_Cat=Conn.ExeCute("Sel&#101;ct ID,Title,Intro FROM b_Cat o&#114;DER BY ID ASC")
Arr_Cat=Rs_Cat.GetRows
Set Rs_Cat=Nothing


把表数据导出到数组!下面将遍历这个数组

代码:

Dim Arr_CatNumS,Arr_CatNumI
Arr_CatNumS=Ubound(Arr_Cat,2)  "得到数组中数据的下标
For Arr_CatNumI=0 To Arr_CatNumS
    Response.Write("ID:"&amp;Arr_Cat(0,Arr_CatNumI)&amp;" | 标题:"&amp;Arr_Cat(1,Arr_CatNumI)&amp;" | 介绍:"&amp;Arr_Cat(2,Arr_CatNumI)&amp;"<br>")
Next



于是,输出的数据为:
ID:1 | 标题:新闻 | 介绍:这里是新闻
ID:2 | 标题:文章 | 介绍:这里是文章
ID:3 | 标题:下载 | 介绍:这里是下载

很多人可能只知道GetRows方法是形成一个2维数组,但是不知道是怎么样一个2维数组。看看下面的例子:
点击在新窗口中浏览此图片
生成的2维数组通过表格的形式显示出来:
点击在新窗口中浏览此图片
这样就对比起来就清晰多了!

Tags: ASP效率

ASP抽取数据的执行效率

通常从数据库中抽取数据记录,需要使用到SQL语句,查询获得相关记录集,然后从记录集中选择相关字段、相关记录行进行显示。

那么在抽取到显示的一系列列过程中,如果注意如下几个要点,则令抽取数据的执行效率大大增加。

1,明确抽取的字段名称

正常的SQL语句抽取记录是:


代码:
Sel&#101;ct * from [data_table]




即从数据表data_table中抽取所有字段的记录值。

sel&#101;ct * 语句的执行效率是很低的,因为在执行这样的语句的时候其实执行了两次查询,在执行sel&#101;ct语句前,首先必须查询系统表来确定名称和数据类型。

所以尽量最少使用sel&#101;ct *语句,而使用明确的字段名称,如:


代码:
Sel&#101;ct cn_name,cn_pwd from [data_table]





2,使用rs(0)比rs(filename)更快


代码:
Set rs=conn.Execute("Sel&#101;ct cn_name,cn_pwd from [data_table]")




记录集rs()里面可以写字段名(字符型),或者字段索引号(数字),它代表字段列表中第几个字段。比如:
代码:
rs(0)就表示rs("cn_name")
rs(1)表示rs("cn_pwd")

事实已证明了用索引数(index number)访问记录集元素要比用字段名称(field name)快出几倍。按字符串查询要比按整数查询花去更多的时间和系统资源。

3,使用记录集rs值前,将其赋值给变量



代码:
<%
Set rs=conn.Execute("Sel&#101;ct cn_name,cn_pwd from [data_table] wh&#101;re cn_id=1")
if not rs.eof then
do while not rs.eof
cn_name = rs(0) " 把rs值赋给变量
cn_pwd = rs(1)
" ... 使用变量处理工作
rs.movenext
loop
end if
rs.close
Set rs = Nothing
%>





但在SQL语句或存储过程中改变了sel&#101;ct列表的字段显示顺序,那么在赋值和处理时就要注意了。

4,当然,使用GetRows()又是另外一回事了

CDONTS和Jmail的使用

CDONTS

<%
Set cdomail = Server.CreateObject("CDONTS.NewMail") "建立邮件对象
cdomail.Subject = "Mail Subject" "邮件标题
cdomail.From = "Sender"s Mail" "发件人的地址
cdomail.To = "Email will from" "收件人的地址
cdomail.Body = "Mail Body" "邮件的内容
cdomail.Send "执行发送
%>

  这种方法发送邮件是最简单的,同时也带来一定的问题,就是很少有服务器会开这项服务!


  我们写程序,一般情况下都是说要代码模块化,这样方便维护,同时也方便移植。因此,我在这里将这个发邮件的写成一个子程,在调用的时候可以直接调用(当然,如果你高兴写成函数的话也是可以的,这个主要是看个人兴趣):

<%
"参数说明
"Subject : 邮件标题
"MailAddress : 发件服务器的地址,如smtp.163.com
"Email : 收件人邮件地址
"Sender : 发件人姓名
"Content : 邮件内容
"Fromer : 发件人的邮件地址

Sub SendAction(subject, mailaddress, email, sender, content, fromer)
Set jmail = Server.CreateObject("JMAIL.SMTPMail") "创建一个JMAIL对象
jmail.silent = true "JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE
jmail.logging = true "启用使用日志
jmail.Charset = "GB2312" "邮件文字的代码为简体中文
jmail.ContentType = "text/html" "邮件的格式为HTML的
jmail.ServerAddress = mailaddress "发送邮件的服务器
jmail.AddRecipient Email "邮件的收件人
jmail.SenderName = sender "邮件发送者的姓名
jmail.Sender = fromer "邮件发送者的邮件地址
jmail.Priority = 1 "邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Subject = subject "邮件的标题
jmail.Body = content "邮件的内容
"由于没有用到密抄跟抄送,这里屏蔽掉这两句,如果您有需要的话,可以在这里恢复
"jmail.AddRecipientBCC Email "密件收件人的地址
"jmail.AddRecipientCC Email "邮件抄送者的地址
jmail.Execute() "执行邮件发送
jmail.Close "关闭邮件对象
End Sub

"调用此Sub的例子
Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromer
strSubject = "这是一封用JMAIL发送的测试邮件"
strContent = "JMail组件发送测试成功!"
strEmail = "xxx@xxx.com"
strFromer = "xxx@xxx.com"
strMailAddress = "mail.xxx.com"

Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)
%>
----------------------------------------------------------

Jmail

<%
Set jmail = Server.CreateObject("JMAIL.SMTPMail") "创建一个JMAIL对象
jmail.silent = true "JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE
jmail.logging = true "启用使用日志
jmail.Charset = "GB2312" "邮件文字的代码为简体中文
jmail.ContentType = "text/html" "邮件的格式为HTML的
jmail.ServerAddress = "Server Address" "发送邮件的服务器
jmail.AddRecipient Email "邮件的收件人
jmail.SenderName = "SenderName" "邮件发送者的姓名
jmail.Sender = "Email Address" "邮件发送者的邮件地址
jmail.Priority = 1 "邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Subject = "Mail Subject" "邮件的标题
jmail.Body = "Mail Body" "邮件的内容
jmail.AddRecipientBCC Email "密件收件人的地址
jmail.AddRecipientCC Email "邮件抄送者的地址
jmail.Execute() "执行邮件发送
jmail.Close "关闭邮件对象
%>

  w3 Jmail4.3组件重新设计了其内部结构——使用Message对象代替原来的单一对象Jmail.smtpmail发送邮件,有些方法需要身份验证的(如163、yahoo等),可以用下面的方法解决:
<%
Set jmail = Server.CreateObject("JMAIL.Message") "建立发送邮件的对象
jmail.silent = true "屏蔽例外错误,返回FALSE跟TRUE两值j
jmail.logging = true "启用邮件日志
jmail.Charset = "GB2312" "邮件的文字编码为国标
jmail.ContentType = "text/html" "邮件的格式为HTML格式
jmail.AddRecipient Email "邮件收件人的地址
jmail.From = "Email From for Sender" "发件人的E-MAIL地址
jmail.MailServerUserName = "UserName of Email" "登录邮件服务器所需的用户名
jmail.MailServerPassword = "Password of Email" "登录邮件服务器所需的密码
jmail.Subject = "Mail Subject" "邮件的标题
jmail.Body = "Mail Body" "邮件的内容
jmail.Prority = 1 "邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Send("Server Address") "执行邮件发送(通过邮件服务器地址)
jmail.Close() "关闭对象
%>

Jmail的Prority属性可能在早于4.3版本之前不支持.

Tags: jmail, asp发邮件

ASP 简体转繁体

用方法 比如转换xxx.html,那么页面就是 A.asp?f=xxx.html
代码:

<%
if request("f")=""  then
response.end
end if
function f(content)
dim s,t,c,d,i
s="万,与,丑,专,业,丛,东,丝,丢,两,严,丧,个,丬,丰,临,为,丽,举,么,义,乌,乐,乔,习,乡,书,买,乱,争,于,亏,云,亘,亚,产,亩,亲,亵,亸,亿,仅,从,仑,仓,仪,们,价,众,优,伙,会,伛,伞,伟,传,伤,伥,伦,伧,伪,伫,体,余,佣,佥,侠,侣,侥,侦,侧,侨,侩,侪,侬,俣,俦,俨,俩,俪,俭,债,倾,偬,偻,偾,偿,傥,傧,储,傩,儿,兑,兖,党,兰,关,兴,兹,养,兽,冁,内,冈,册,写,军,农,冢,冯,冲,决,况,冻,净,凄,凉,凌,减,凑,凛,几,凤,凫,凭,凯,击,凼,凿,刍,划,刘,则,刚,创,删,别,刬,刭,刽,刿,剀,剂,剐,剑,剥,剧,劝,办,务,劢,动,励,劲,劳,势,勋,勐,勚,匀,匦,匮,区,医,华,协,单,卖,卢,卤,卧,卫,却,卺,厂,厅,历,厉,压,厌,厍,厕,厢,厣,厦,厨,厩,厮,县,叁,参,叆,叇,双,发,变,叙,叠,叶,号,叹,叽,吁,后,吓,吕,吗,吣,吨,听,启,吴,呒,呓,呕,呖,呗,员,呙,呛,呜,咏,咔,咙,咛,咝,咤,咴,咸,哌,响,哑,哒,哓,哔,哕,哗,哙,哜,哝,哟,唛,唝,唠,唡,唢,唣,唤,唿,啧,啬,啭,啮,啰,啴,啸,喷,喽,喾,嗫,嗬,嗳,嘘,嘤,嘱,噜,噼,嚣,嚯,团,园,囱,围,囵,国,图,圆,圣,圹,场,坂,坏,块,坚,坛,坜,坝,坞,坟,坠,垄,垅,垆,垒,垦,垧,垩,垫,垭,垯,垱,垲,垴,埘,埙,埚,埝,埯,堑,堕,塆,塬,墙,壮,声,壳,壶,壸,处,备,复,够,头,夸,夹,夺,奁,奂,奋,奖,奥,妆,妇,妈,妩,妪,妫,姗,姜,娄,娅,娆,娇,娈,娱,娲,娴,婳,婴,婵,婶,媪,嫒,嫔,嫱,嬷,孙,学,孪,宁,宝,实,宠,审,宪,宫,宽,宾,寝,对,寻,导,寿,将,尔,尘,尝,尧,尴,尸,尽,层,屃,屉,届,属,屡,屦,屿,岁,岂,岖,岗,岘,岙,岚,岛,岭,岳,岽,岿,峃,峄,峡,峣,峤,峥,峦,崂,崃,崄,崭,嵘,嵚,嵛,嵝,嵴,巅,巩,巯,币,帅,师,帏,帐,帘,帜,带,帧,帮,帱,帻,帼,幂,幞,干,并,幺,广,庄,庆,庐,庑,库,应,庙,庞,废,庼,廪,开,异,弃,张,弥,弪,弯,弹,强,归,当,录,彟,彦,彻,径,徕,御,忆,忏,忧,忾,怀,态,怂,怃,怄,怅,怆,怜,总,怼,怿,恋,恳,恶,恸,恹,恺,恻,恼,恽,悦,悫,悬,悭,悯,惊,惧,惨,惩,惫,惬,惭,惮,惯,愍,愠,愤,愦,愿,慑,慭,憷,懑,懒,懔,戆,戋,戏,戗,战,戬,户,扎,扑,扦,执,扩,扪,扫,扬,扰,抚,抛,抟,抠,抡,抢,护,报,担,拟,拢,拣,拥,拦,拧,拨,择,挂,挚,挛,挜,挝,挞,挟,挠,挡,挢,挣,挤,挥,挦,捞,损,捡,换,捣,据,捻,掳,掴,掷,掸,掺,掼,揸,揽,揿,搀,搁,搂,搅,携,摄,摅,摆,摇,摈,摊,撄,撑,撵,撷,撸,撺,擞,攒,敌,敛,数,斋,斓,斗,斩,断,无,旧,时,旷,旸,昙,昼,昽,显,晋,晒,晓,晔,晕,晖,暂,暧,札,术,朴,机,杀,杂,权,条,来,杨,杩,杰,极,构,枞,枢,枣,枥,枧,枨,枪,枫,枭,柜,柠,柽,栀,栅,标,栈,栉,栊,栋,栌,栎,栏,树,栖,样,栾,桊,桠,桡,桢,档,桤,桥,桦,桧,桨,桩,梦,梼,梾,检,棂,椁,椟,椠,椤,椭,楼,榄,榇,榈,榉,槚,槛,槟,槠,横,樯,樱,橥,橱,橹,橼,檐,檩,欢,欤,欧,歼,殁,殇,残,殒,殓,殚,殡,殴,毁,毂,毕,毙,毡,毵,氇,气,氢,氩,氲,汇,汉,污,汤,汹,沓,沟,没,沣,沤,沥,沦,沧,沨,沩,沪,沵,泞,泪,泶,泷,泸,泺,泻,泼,泽,泾,洁,洒,洼,浃,浅,浆,浇,浈,浉,浊,测,浍,济,浏,浐,浑,浒,浓,浔,浕,涂,涌,涛,涝,涞,涟,涠,涡,涢,涣,涤,润,涧,涨,涩,淀,渊,渌,渍,渎,渐,渑,渔,渖,渗,温,游,湾,湿,溃,溅,溆,溇,滗,滚,滞,滟,滠,满,滢,滤,滥,滦,滨,滩,滪,漤,潆,潇,潋,潍,潜,潴,澜,濑,濒,灏,灭,灯,灵,灾,灿,炀,炉,炖,炜,炝,点,炼,炽,烁,烂,烃,烛,烟,烦,烧,烨,烩,烫,烬,热,焕,焖,焘,煅,煳,煺,熘,爱,爷,牍,牦,牵,牺,犊,犟,犭,状,犷,犸,犹,狈,狍,狝,狞,独,狭,狮,狯,狰,狱,狲,猃,猎,猕,猡,猪,猫,猬,献,獭,玑,玙,玚,玛,玮,环,现,玱,玺,珉,珏,珐,珑,珰,珲,琎,琏,琐,琼,瑶,瑷,璇,璎,瓒,瓮,瓯,电,画,畅,畲,畴,疖,疗,疟,疠,疡,疬,疮,疯,疱,疴,痈,痉,痒,痖,痨,痪,痫,痴,瘅,瘆,瘗,瘘,瘪,瘫,瘾,瘿,癞,癣,癫,癯,皑,皱,皲,盏,盐,监,盖,盗,盘,眍,眦,眬,着,睁,睐,睑,瞒,瞩,矫,矶,矾,矿,砀,码,砖,砗,砚,砜,砺,砻,砾,础,硁,硅,硕,硖,硗,硙,硚,确,硷,碍,碛,碜,碱,碹,磙,礼,祎,祢,祯,祷,祸,禀,禄,禅,离,秃,秆,种,积,称,秽,秾,稆,税,稣,稳,穑,穷,窃,窍,窑,窜,窝,窥,窦,窭,竖,竞,笃,笋,笔,笕,笺,笼,笾,筑,筚,筛,筜,筝,筹,签,简,箓,箦,箧,箨,箩,箪,箫,篑,篓,篮,篱,簖,籁,籴,类,籼,粜,粝,粤,粪,粮,糁,糇,紧,絷,纟,纠,纡,红,纣,纤,纥,约,级,纨,纩,纪,纫,纬,纭,纮,纯,纰,纱,纲,纳,纴,纵,纶,纷,纸,纹,纺,纻,纼,纽,纾,线,绀,绁,绂,练,组,绅,细,织,终,绉,绊,绋,绌,绍,绎,经,绐,绑,绒,结,绔,绕,绖,绗,绘,给,绚,绛,络,绝,绞,统,绠,绡,绢,绣,绤,绥,绦,继,绨,绩,绪,绫,绬,续,绮,绯,绰,绱,绲,绳,维,绵,绶,绷,绸,绹,绺,绻,综,绽,绾,绿,缀,缁,缂,缃,缄,缅,缆,缇,缈,缉,缊,缋,缌,缍,缎,缏,缐,缑,缒,缓,缔,缕,编,缗,缘,缙,缚,缛,缜,缝,缞,缟,缠,缡,缢,缣,缤,缥,缦,缧,缨,缩,缪,缫,缬,缭,缮,缯,缰,缱,缲,缳,缴,缵,罂,网,罗,罚,罢,罴,羁,羟,羡,翘,翙,翚,耢,耧,耸,耻,聂,聋,职,聍,联,聩,聪,肃,肠,肤,肷,肾,肿,胀,胁,胆,胜,胧,胨,胪,胫,胶,脉,脍,脏,脐,脑,脓,脔,脚,脱,脶,脸,腊,腌,腘,腭,腻,腼,腽,腾,膑,臜,舆,舣,舰,舱,舻,艰,艳,艹,艺,节,芈,芗,芜,芦,苁,苇,苈,苋,苌,苍,苎,苏,苘,苹,茎,茏,茑,茔,茕,茧,荆,荐,荙,荚,荛,荜,荞,荟,荠,荡,荣,荤,荥,荦,荧,荨,荩,荪,荫,荬,荭,荮,药,莅,莜,莱,莲,莳,莴,莶,获,莸,莹,莺,莼,萚,萝,萤,营,萦,萧,萨,葱,蒇,蒉,蒋,蒌,蓝,蓟,蓠,蓣,蓥,蓦,蔷,蔹,蔺,蔼,蕲,蕴,薮,藁,藓,虏,虑,虚,虫,虬,虮,虽,虾,虿,蚀,蚁,蚂,蚕,蚝,蚬,蛊,蛎,蛏,蛮,蛰,蛱,蛲,蛳,蛴,蜕,蜗,蜡,蝇,蝈,蝉,蝎,蝼,蝾,螀,螨,蟏,衅,衔,补,衬,衮,袄,袅,袆,袜,袭,袯,装,裆,裈,裢,裣,裤,裥,褛,褴,襁,襕,见,观,觃,规,觅,视,觇,览,觉,觊,觋,觌,觍,觎,觏,觐,觑,觞,触,觯,詟,誉,誊,讠,计,订,讣,认,讥,讦,讧,讨,让,讪,讫,训,议,讯,记,讱,讲,讳,讴,讵,讶,讷,许,讹,论,讻,讼,讽,设,访,诀,证,诂,诃,评,诅,识,诇,诈,诉,诊,诋,诌,词,诎,诏,诐,译,诒,诓,诔,试,诖,诗,诘,诙,诚,诛,诜,话,诞,诟,诠,诡,询,诣,诤,该,详,诧,诨,诩,诪,诫,诬,语,诮,误,诰,诱,诲,诳,说,诵,诶,请,诸,诹,诺,读,诼,诽,课,诿,谀,谁,谂,调,谄,谅,谆,谇,谈,谊,谋,谌,谍,谎,谏,谐,谑,谒,谓,谔,谕,谖,谗,谘,谙,谚,谛,谜,谝,谞,谟,谠,谡,谢,谣,谤,谥,谦,谧,谨,谩,谪,谫,谬,谭,谮,谯,谰,谱,谲,谳,谴,谵,谶,谷,豮,贝,贞,负,贠,贡,财,责,贤,败,账,货,质,贩,贪,贫,贬,购,贮,贯,贰,贱,贲,贳,贴,贵,贶,贷,贸,费,贺,贻,贼,贽,贾,贿,赀,赁,赂,赃,资,赅,赆,赇,赈,赉,赊,赋,赌,赍,赎,赏,赐,赑,赒,赓,赔,赕,赖,赗,赘,赙,赚,赛,赜,赝,赞,赟,赠,赡,赢,赣,赪,赵,赶,趋,趱,趸,跃,跄,跖,跞,践,跶,跷,跸,跹,跻,踊,踌,踪,踬,踯,蹑,蹒,蹰,蹿,躏,躜,躯,车,轧,轨,轩,轪,轫,转,轭,轮,软,轰,轱,轲,轳,轴,轵,轶,轷,轸,轹,轺,轻,轼,载,轾,轿,辀,辁,辂,较,辄,辅,辆,辇,辈,辉,辊,辋,辌,辍,辎,辏,辐,辑,辒,输,辔,辕,辖,辗,辘,辙,辚,辞,辩,辫,边,辽,达,迁,过,迈,运,还,这,进,远,违,连,迟,迩,迳,迹,适,选,逊,递,逦,逻,遗,遥,邓,邝,邬,邮,邹,邺,邻,郁,郄,郏,郐,郑,郓,郦,郧,郸,酝,酦,酱,酽,酾,酿,释,里,鉅,鉴,銮,錾,钆,钇,针,钉,钊,钋,钌,钍,钎,钏,钐,钑,钒,钓,钔,钕,钖,钗,钘,钙,钚,钛,钝,钞,钟,钠,钡,钢,钣,钤,钥,钦,钧,钨,钩,钪,钫,钬,钭,钮,钯,钰,钱,钲,钳,钴,钵,钶,钷,钸,钹,钺,钻,钼,钽,钾,钿,铀,铁,铂,铃,铄,铅,铆,铈,铉,铊,铋,铌,铍,铎,铏,铐,铑,铒,铓,铔,铕,铖,铗,铘,铙,铚,铛,铜,铝,铞,铟,铠,铡,铢,铣,铤,铥,铦,铧,铨,铩,铪,铫,铬,铭,铮,铯,铰,铱,铲,铳,铴,铵,银,铷,铸,铹,铺,铻,铼,铽,链,铿,销,锁,锂,锃,锄,锅,锆,锇,锈,锉,锊,锋,锌,锍,锎,锏,锐,锑,锒,锓,锔,锕,锖,锗,锘,错,锚,锛,锜,锝,锞,锟,锠,锡,锢,锣,锤,锥,锦,锧,锨,锩,锪,锫,锬,锭,键,锯,锰,锱,锲,锳,锴,锵,锶,锷,锸,锹,锺,锻,锼,锽,锾,锿,镀,镁,镂,镃,镄,镅,镆,镇,镈,镉,镊,镋,镌,镍,镎,镏,镐,镑,镒,镓,镔,镕,镖,镗,镘,镙,镚,镛,镜,镝,镞,镟,镠,镡,镢,镣,镤,镥,镦,镧,镨,镩,镪,镫,镬,镭,镮,镯,镰,镱,镲,镳,镴,镵,镶,长,门,闩,闪,闫,闬,闭,问,闯,闰,闱,闲,闳,间,闵,闶,闷,闸,闹,闺,闻,闼,闽,闾,闿,阀,阁,阂,阃,阄,阅,阆,阇,阈,阉,阊,阋,阌,阍,阎,阏,阐,阑,阒,阓,阔,阕,阖,阗,阘,阙,阚,阛,队,阳,阴,阵,阶,际,陆,陇,陈,陉,陕,陧,陨,险,随,隐,隶,隽,难,雏,雠,雳,雾,霁,霉,霭,靓,静,靥,鞑,鞒,鞯,鞴,韦,韧,韨,韩,韪,韫,韬,韵,页,顶,顷,顸,项,顺,须,顼,顽,顾,顿,颀,颁,颂,颃,预,颅,领,颇,颈,颉,颊,颋,颌,颍,颎,颏,颐,频,颒,颓,颔,颕,颖,颗,题,颙,颚,颛,颜,额,颞,颟,颠,颡,颢,颣,颤,颥,颦,颧,风,飏,飐,飑,飒,飓,飔,飕,飖,飗,飘,飙,飚,飞,飨,餍,饤,饥,饦,饧,饨,饩,饪,饫,饬,饭,饮,饯,饰,饱,饲,饳,饴,饵,饶,饷,饸,饹,饺,饻,饼,饽,饾,饿,馀,馁,馂,馃,馄,馅,馆,馇,馈,馉,馊,馋,馌,馍,馎,馏,馐,馑,馒,馓,馔,馕,马,驭,驮,驯,驰,驱,驲,驳,驴,驵,驶,驷,驸,驹,驺,驻,驼,驽,驾,驿,骀,骁,骂,骃,骄,骅,骆,骇,骈,骉,骊,骋,验,骍,骎,骏,骐,骑,骒,骓,骔,骕,骖,骗,骘,骙,骚,骛,骜,骝,骞,骟,骠,骡,骢,骣,骤,骥,骦,骧,髅,髋,髌,鬓,魇,魉,鱼,鱽,鱾,鱿,鲀,鲁,鲂,鲄,鲅,鲆,鲇,鲈,鲉,鲊,鲋,鲌,鲍,鲎,鲏,鲐,鲑,鲒,鲓,鲔,鲕,鲖,鲗,鲘,鲙,鲚,鲛,鲜,鲝,鲞,鲟,鲠,鲡,鲢,鲣,鲤,鲥,鲦,鲧,鲨,鲩,鲪,鲫,鲬,鲭,鲮,鲯,鲰,鲱,鲲,鲳,鲴,鲵,鲶,鲷,鲸,鲹,鲺,鲻,鲼,鲽,鲾,鲿,鳀,鳁,鳂,鳃,鳄,鳅,鳆,鳇,鳈,鳉,鳊,鳋,鳌,鳍,鳎,鳏,鳐,鳑,鳒,鳓,鳔,鳕,鳖,鳗,鳘,鳙,鳛,鳜,鳝,鳞,鳟,鳠,鳡,鳢,鳣,鸟,鸠,鸡,鸢,鸣,鸤,鸥,鸦,鸧,鸨,鸩,鸪,鸫,鸬,鸭,鸮,鸯,鸰,鸱,鸲,鸳,鸴,鸵,鸶,鸷,鸸,鸹,鸺,鸻,鸼,鸽,鸾,鸿,鹀,鹁,鹂,鹃,鹄,鹅,鹆,鹇,鹈,鹉,鹊,鹋,鹌,鹍,鹎,鹏,鹐,鹑,鹒,鹓,鹔,鹕,鹖,鹗,鹘,鹙,鹚,鹛,鹜,鹝,鹞,鹟,鹠,鹡,鹢,鹣,鹤,鹥,鹦,鹧,鹨,鹩,鹪,鹫,鹬,鹭,鹯,鹰,鹱,鹲,鹳,鹴,鹾,麦,麸,黄,黉,黡,黩,黪,黾,鼋,鼌,鼍,鼗,鼹,齄,齐,齑,齿,龀,龁,龂,龃,龄,龅,龆,龇,龈,龉,龊,龋,龌,龙,龚,龛,龟"
t="萬,與,醜,專,業,叢,東,絲,丟,兩,嚴,喪,個,爿,豐,臨,為,麗,舉,麼,義,烏,樂,喬,習,鄉,書,買,亂,爭,於,虧,雲,亙,亞,產,畝,親,褻,嚲,億,僅,從,侖,倉,儀,們,價,眾,優,夥,會,傴,傘,偉,傳,傷,倀,倫,傖,偽,佇,體,餘,傭,僉,俠,侶,僥,偵,側,僑,儈,儕,儂,俁,儔,儼,倆,儷,儉,債,傾,傯,僂,僨,償,儻,儐,儲,儺,兒,兌,兗,黨,蘭,關,興,茲,養,獸,囅,內,岡,冊,寫,軍,農,塚,馮,沖,決,況,凍,淨,淒,涼,淩,減,湊,凜,幾,鳳,鳧,憑,凱,擊,氹,鑿,芻,劃,劉,則,剛,創,刪,別,剗,剄,劊,劌,剴,劑,剮,劍,剝,劇,勸,辦,務,勱,動,勵,勁,勞,勢,勳,猛,勩,勻,匭,匱,區,醫,華,協,單,賣,盧,鹵,臥,衛,卻,巹,廠,廳,曆,厲,壓,厭,厙,廁,廂,厴,廈,廚,廄,廝,縣,三,參,靉,靆,雙,發,變,敘,疊,葉,號,歎,嘰,籲,後,嚇,呂,嗎,唚,噸,聽,啟,吳,嘸,囈,嘔,嚦,唄,員,咼,嗆,嗚,詠,哢,嚨,嚀,噝,吒,噅,鹹,呱,響,啞,噠,嘵,嗶,噦,嘩,噲,嚌,噥,喲,嘜,嗊,嘮,啢,嗩,唕,喚,呼,嘖,嗇,囀,齧,囉,嘽,嘯,噴,嘍,嚳,囁,呵,噯,噓,嚶,囑,嚕,劈,囂,謔,團,園,囪,圍,圇,國,圖,圓,聖,壙,場,阪,壞,塊,堅,壇,壢,壩,塢,墳,墜,壟,壟,壚,壘,墾,坰,堊,墊,埡,墶,壋,塏,堖,塒,塤,堝,墊,垵,塹,墮,壪,原,牆,壯,聲,殼,壺,壼,處,備,複,夠,頭,誇,夾,奪,奩,奐,奮,獎,奧,妝,婦,媽,嫵,嫗,媯,姍,薑,婁,婭,嬈,嬌,孌,娛,媧,嫻,嫿,嬰,嬋,嬸,媼,嬡,嬪,嬙,嬤,孫,學,孿,寧,寶,實,寵,審,憲,宮,寬,賓,寢,對,尋,導,壽,將,爾,塵,嘗,堯,尷,屍,盡,層,屭,屜,屆,屬,屢,屨,嶼,歲,豈,嶇,崗,峴,嶴,嵐,島,嶺,嶽,崠,巋,嶨,嶧,峽,嶢,嶠,崢,巒,嶗,崍,嶮,嶄,嶸,嶔,崳,嶁,脊,巔,鞏,巰,幣,帥,師,幃,帳,簾,幟,帶,幀,幫,幬,幘,幗,冪,襆,幹,並,么,廣,莊,慶,廬,廡,庫,應,廟,龐,廢,廎,廩,開,異,棄,張,彌,弳,彎,彈,強,歸,當,錄,彠,彥,徹,徑,徠,禦,憶,懺,憂,愾,懷,態,慫,憮,慪,悵,愴,憐,總,懟,懌,戀,懇,惡,慟,懨,愷,惻,惱,惲,悅,愨,懸,慳,憫,驚,懼,慘,懲,憊,愜,慚,憚,慣,湣,慍,憤,憒,願,懾,憖,怵,懣,懶,懍,戇,戔,戲,戧,戰,戩,戶,紮,撲,扡,執,擴,捫,掃,揚,擾,撫,拋,摶,摳,掄,搶,護,報,擔,擬,攏,揀,擁,攔,擰,撥,擇,掛,摯,攣,掗,撾,撻,挾,撓,擋,撟,掙,擠,揮,撏,撈,損,撿,換,搗,據,撚,擄,摑,擲,撣,摻,摜,摣,攬,撳,攙,擱,摟,攪,攜,攝,攄,擺,搖,擯,攤,攖,撐,攆,擷,擼,攛,擻,攢,敵,斂,數,齋,斕,鬥,斬,斷,無,舊,時,曠,暘,曇,晝,曨,顯,晉,曬,曉,曄,暈,暉,暫,曖,劄,術,樸,機,殺,雜,權,條,來,楊,榪,傑,極,構,樅,樞,棗,櫪,梘,棖,槍,楓,梟,櫃,檸,檉,梔,柵,標,棧,櫛,櫳,棟,櫨,櫟,欄,樹,棲,樣,欒,棬,椏,橈,楨,檔,榿,橋,樺,檜,槳,樁,夢,檮,棶,檢,欞,槨,櫝,槧,欏,橢,樓,欖,櫬,櫚,櫸,檟,檻,檳,櫧,橫,檣,櫻,櫫,櫥,櫓,櫞,簷,檁,歡,歟,歐,殲,歿,殤,殘,殞,殮,殫,殯,毆,毀,轂,畢,斃,氈,毿,氌,氣,氫,氬,氳,彙,漢,汙,湯,洶,遝,溝,沒,灃,漚,瀝,淪,滄,渢,溈,滬,濔,濘,淚,澩,瀧,瀘,濼,瀉,潑,澤,涇,潔,灑,窪,浹,淺,漿,澆,湞,溮,濁,測,澮,濟,瀏,滻,渾,滸,濃,潯,濜,塗,湧,濤,澇,淶,漣,潿,渦,溳,渙,滌,潤,澗,漲,澀,澱,淵,淥,漬,瀆,漸,澠,漁,瀋,滲,溫,遊,灣,濕,潰,濺,漵,漊,潷,滾,滯,灩,灄,滿,瀅,濾,濫,灤,濱,灘,澦,濫,瀠,瀟,瀲,濰,潛,瀦,瀾,瀨,瀕,灝,滅,燈,靈,災,燦,煬,爐,燉,煒,熗,點,煉,熾,爍,爛,烴,燭,煙,煩,燒,燁,燴,燙,燼,熱,煥,燜,燾,煆,糊,退,溜,愛,爺,牘,犛,牽,犧,犢,強,犬,狀,獷,獁,猶,狽,麅,獮,獰,獨,狹,獅,獪,猙,獄,猻,獫,獵,獼,玀,豬,貓,蝟,獻,獺,璣,璵,瑒,瑪,瑋,環,現,瑲,璽,瑉,玨,琺,瓏,璫,琿,璡,璉,瑣,瓊,瑤,璦,璿,瓔,瓚,甕,甌,電,畫,暢,佘,疇,癤,療,瘧,癘,瘍,鬁,瘡,瘋,皰,屙,癰,痙,癢,瘂,癆,瘓,癇,癡,癉,瘮,瘞,瘺,癟,癱,癮,癭,癩,癬,癲,臒,皚,皺,皸,盞,鹽,監,蓋,盜,盤,瞘,眥,矓,著,睜,睞,瞼,瞞,矚,矯,磯,礬,礦,碭,碼,磚,硨,硯,碸,礪,礱,礫,礎,硜,矽,碩,硤,磽,磑,礄,確,鹼,礙,磧,磣,堿,镟,滾,禮,禕,禰,禎,禱,禍,稟,祿,禪,離,禿,稈,種,積,稱,穢,穠,穭,稅,穌,穩,穡,窮,竊,竅,窯,竄,窩,窺,竇,窶,豎,競,篤,筍,筆,筧,箋,籠,籩,築,篳,篩,簹,箏,籌,簽,簡,籙,簀,篋,籜,籮,簞,簫,簣,簍,籃,籬,籪,籟,糴,類,秈,糶,糲,粵,糞,糧,糝,餱,緊,縶,糸,糾,紆,紅,紂,纖,紇,約,級,紈,纊,紀,紉,緯,紜,紘,純,紕,紗,綱,納,紝,縱,綸,紛,紙,紋,紡,紵,紖,紐,紓,線,紺,絏,紱,練,組,紳,細,織,終,縐,絆,紼,絀,紹,繹,經,紿,綁,絨,結,絝,繞,絰,絎,繪,給,絢,絳,絡,絕,絞,統,綆,綃,絹,繡,綌,綏,絛,繼,綈,績,緒,綾,緓,續,綺,緋,綽,緔,緄,繩,維,綿,綬,繃,綢,綯,綹,綣,綜,綻,綰,綠,綴,緇,緙,緗,緘,緬,纜,緹,緲,緝,縕,繢,緦,綞,緞,緶,線,緱,縋,緩,締,縷,編,緡,緣,縉,縛,縟,縝,縫,縗,縞,纏,縭,縊,縑,繽,縹,縵,縲,纓,縮,繆,繅,纈,繚,繕,繒,韁,繾,繰,繯,繳,纘,罌,網,羅,罰,罷,羆,羈,羥,羨,翹,翽,翬,耮,耬,聳,恥,聶,聾,職,聹,聯,聵,聰,肅,腸,膚,膁,腎,腫,脹,脅,膽,勝,朧,腖,臚,脛,膠,脈,膾,髒,臍,腦,膿,臠,腳,脫,腡,臉,臘,醃,膕,齶,膩,靦,膃,騰,臏,臢,輿,艤,艦,艙,艫,艱,豔,艸,藝,節,羋,薌,蕪,蘆,蓯,葦,藶,莧,萇,蒼,苧,蘇,檾,蘋,莖,蘢,蔦,塋,煢,繭,荊,薦,薘,莢,蕘,蓽,蕎,薈,薺,蕩,榮,葷,滎,犖,熒,蕁,藎,蓀,蔭,蕒,葒,葤,藥,蒞,蓧,萊,蓮,蒔,萵,薟,獲,蕕,瑩,鶯,蓴,蘀,蘿,螢,營,縈,蕭,薩,蔥,蕆,蕢,蔣,蔞,藍,薊,蘺,蕷,鎣,驀,薔,蘞,藺,藹,蘄,蘊,藪,槁,蘚,虜,慮,虛,蟲,虯,蟣,雖,蝦,蠆,蝕,蟻,螞,蠶,蠔,蜆,蠱,蠣,蟶,蠻,蟄,蛺,蟯,螄,蠐,蛻,蝸,蠟,蠅,蟈,蟬,蠍,螻,蠑,螿,蟎,蠨,釁,銜,補,襯,袞,襖,嫋,褘,襪,襲,襏,裝,襠,褌,褳,襝,褲,襇,褸,襤,繈,襴,見,觀,覎,規,覓,視,覘,覽,覺,覬,覡,覿,覥,覦,覯,覲,覷,觴,觸,觶,讋,譽,謄,訁,計,訂,訃,認,譏,訐,訌,討,讓,訕,訖,訓,議,訊,記,訒,講,諱,謳,詎,訝,訥,許,訛,論,訩,訟,諷,設,訪,訣,證,詁,訶,評,詛,識,詗,詐,訴,診,詆,謅,詞,詘,詔,詖,譯,詒,誆,誄,試,詿,詩,詰,詼,誠,誅,詵,話,誕,詬,詮,詭,詢,詣,諍,該,詳,詫,諢,詡,譸,誡,誣,語,誚,誤,誥,誘,誨,誑,說,誦,誒,請,諸,諏,諾,讀,諑,誹,課,諉,諛,誰,諗,調,諂,諒,諄,誶,談,誼,謀,諶,諜,謊,諫,諧,謔,謁,謂,諤,諭,諼,讒,諮,諳,諺,諦,謎,諞,諝,謨,讜,謖,謝,謠,謗,諡,謙,謐,謹,謾,謫,譾,謬,譚,譖,譙,讕,譜,譎,讞,譴,譫,讖,穀,豶,貝,貞,負,貟,貢,財,責,賢,敗,賬,貨,質,販,貪,貧,貶,購,貯,貫,貳,賤,賁,貰,貼,貴,貺,貸,貿,費,賀,貽,賊,贄,賈,賄,貲,賃,賂,贓,資,賅,贐,賕,賑,賚,賒,賦,賭,齎,贖,賞,賜,贔,賙,賡,賠,賧,賴,賵,贅,賻,賺,賽,賾,贗,贊,贇,贈,贍,贏,贛,赬,趙,趕,趨,趲,躉,躍,蹌,蹠,躒,踐,躂,蹺,蹕,躚,躋,踴,躊,蹤,躓,躑,躡,蹣,躕,躥,躪,躦,軀,車,軋,軌,軒,軑,軔,轉,軛,輪,軟,轟,軲,軻,轤,軸,軹,軼,軤,軫,轢,軺,輕,軾,載,輊,轎,輈,輇,輅,較,輒,輔,輛,輦,輩,輝,輥,輞,輬,輟,輜,輳,輻,輯,轀,輸,轡,轅,轄,輾,轆,轍,轔,辭,辯,辮,邊,遼,達,遷,過,邁,運,還,這,進,遠,違,連,遲,邇,逕,跡,適,選,遜,遞,邐,邏,遺,遙,鄧,鄺,鄔,郵,鄒,鄴,鄰,鬱,郤,郟,鄶,鄭,鄆,酈,鄖,鄲,醞,醱,醬,釅,釃,釀,釋,裏,钜,鑒,鑾,鏨,釓,釔,針,釘,釗,釙,釕,釷,釺,釧,釤,鈒,釩,釣,鍆,釹,鍚,釵,鈃,鈣,鈈,鈦,鈍,鈔,鍾,鈉,鋇,鋼,鈑,鈐,鑰,欽,鈞,鎢,鉤,鈧,鈁,鈥,鈄,鈕,鈀,鈺,錢,鉦,鉗,鈷,缽,鈳,鉕,鈽,鈸,鉞,鑽,鉬,鉭,鉀,鈿,鈾,鐵,鉑,鈴,鑠,鉛,鉚,鈰,鉉,鉈,鉍,鈮,鈹,鐸,鉶,銬,銠,鉺,鋩,錏,銪,鋮,鋏,鋣,鐃,銍,鐺,銅,鋁,銱,銦,鎧,鍘,銖,銑,鋌,銩,銛,鏵,銓,鎩,鉿,銚,鉻,銘,錚,銫,鉸,銥,鏟,銃,鐋,銨,銀,銣,鑄,鐒,鋪,鋙,錸,鋱,鏈,鏗,銷,鎖,鋰,鋥,鋤,鍋,鋯,鋨,鏽,銼,鋝,鋒,鋅,鋶,鐦,鐧,銳,銻,鋃,鋟,鋦,錒,錆,鍺,鍩,錯,錨,錛,錡,鍀,錁,錕,錩,錫,錮,鑼,錘,錐,錦,鑕,鍁,錈,鍃,錇,錟,錠,鍵,鋸,錳,錙,鍥,鍈,鍇,鏘,鍶,鍔,鍤,鍬,鍾,鍛,鎪,鍠,鍰,鎄,鍍,鎂,鏤,鎡,鐨,鎇,鏌,鎮,鎛,鎘,鑷,钂,鐫,鎳,鎿,鎦,鎬,鎊,鎰,鎵,鑌,鎔,鏢,鏜,鏝,鏍,鏰,鏞,鏡,鏑,鏃,鏇,鏐,鐔,钁,鐐,鏷,鑥,鐓,鑭,鐠,鑹,鏹,鐙,鑊,鐳,鐶,鐲,鐮,鐿,鑔,鑣,鑞,鑱,鑲,長,門,閂,閃,閆,閈,閉,問,闖,閏,闈,閑,閎,間,閔,閌,悶,閘,鬧,閨,聞,闥,閩,閭,闓,閥,閣,閡,閫,鬮,閱,閬,闍,閾,閹,閶,鬩,閿,閽,閻,閼,闡,闌,闃,闠,闊,闋,闔,闐,闒,闕,闞,闤,隊,陽,陰,陣,階,際,陸,隴,陳,陘,陝,隉,隕,險,隨,隱,隸,雋,難,雛,讎,靂,霧,霽,黴,靄,靚,靜,靨,韃,鞽,韉,韝,韋,韌,韍,韓,韙,韞,韜,韻,頁,頂,頃,頇,項,順,須,頊,頑,顧,頓,頎,頒,頌,頏,預,顱,領,頗,頸,頡,頰,頲,頜,潁,熲,頦,頤,頻,頮,頹,頷,頴,穎,顆,題,顒,顎,顓,顏,額,顳,顢,顛,顙,顥,纇,顫,顬,顰,顴,風,颺,颭,颮,颯,颶,颸,颼,颻,飀,飄,飆,飆,飛,饗,饜,飣,饑,飥,餳,飩,餼,飪,飫,飭,飯,飲,餞,飾,飽,飼,飿,飴,餌,饒,餉,餄,餎,餃,餏,餅,餑,餖,餓,餘,餒,餕,餜,餛,餡,館,餷,饋,餶,餿,饞,饁,饃,餺,餾,饈,饉,饅,饊,饌,饢,馬,馭,馱,馴,馳,驅,馹,駁,驢,駔,駛,駟,駙,駒,騶,駐,駝,駑,駕,驛,駘,驍,罵,駰,驕,驊,駱,駭,駢,驫,驪,騁,驗,騂,駸,駿,騏,騎,騍,騅,騌,驌,驂,騙,騭,騤,騷,騖,驁,騮,騫,騸,驃,騾,驄,驏,驟,驥,驦,驤,髏,髖,髕,鬢,魘,魎,魚,魛,魢,魷,魨,魯,魴,魺,鮁,鮃,鯰,鱸,鮋,鮓,鮒,鮊,鮑,鱟,鮍,鮐,鮭,鮚,鮳,鮪,鮞,鮦,鰂,鮜,鱠,鱭,鮫,鮮,鮺,鯗,鱘,鯁,鱺,鰱,鰹,鯉,鰣,鰷,鯀,鯊,鯇,鮶,鯽,鯒,鯖,鯪,鯕,鯫,鯡,鯤,鯧,鯝,鯢,鯰,鯛,鯨,鯵,鯴,鯔,鱝,鰈,鰏,鱨,鯷,鰮,鰃,鰓,鱷,鰍,鰒,鰉,鰁,鱂,鯿,鰠,鼇,鰭,鰨,鰥,鰩,鰟,鰜,鰳,鰾,鱈,鱉,鰻,鰵,鱅,鰼,鱖,鱔,鱗,鱒,鱯,鱤,鱧,鱣,鳥,鳩,雞,鳶,鳴,鳲,鷗,鴉,鶬,鴇,鴆,鴣,鶇,鸕,鴨,鴞,鴦,鴒,鴟,鴝,鴛,鴬,鴕,鷥,鷙,鴯,鴰,鵂,鴴,鵃,鴿,鸞,鴻,鵐,鵓,鸝,鵑,鵠,鵝,鵒,鷳,鵜,鵡,鵲,鶓,鵪,鶤,鵯,鵬,鵮,鶉,鶊,鵷,鷫,鶘,鶡,鶚,鶻,鶖,鶿,鶥,鶩,鷊,鷂,鶲,鶹,鶺,鷁,鶼,鶴,鷖,鸚,鷓,鷚,鷯,鷦,鷲,鷸,鷺,鸇,鷹,鸌,鸏,鸛,鸘,鹺,麥,麩,黃,黌,黶,黷,黲,黽,黿,鼂,鼉,鞀,鼴,齇,齊,齏,齒,齔,齕,齗,齟,齡,齙,齠,齜,齦,齬,齪,齲,齷,龍,龔,龕,龜"
c=split(s,",")
d=split(t,",")
for i=0 to 2555
content=replace(content,c(i),d(i))
next
f=content
end function
Set fso = Server.Cr&#101;ateObject("Scripting.FileSystemObject")
set d = fso.opentextfile(server.mappath(request("f")),1,True)
response.write f(d.ReadAll)
set fso = nothing
d.close
%>

Tags: 简繁转换

纯编码实现Access数据库的建立或压缩

代码:


<%
"#######以下是一个类文件,下面的注解是调用类的方法################################################
"# 注意:如果系统不支持建立Scripting.FileSystemObject对象,那么数据库压缩功能将无法使用
"# Access 数据库类
"# Cr&#101;ateDbFile 建立一个Access 数据库文件
"# CompactDatabase 压缩一个Access 数据库文件
"# 建立对象方法:
"# Set a = New DatabaseTools
"# by (萧寒雪) s.f.
"#########################################################################################

Class DatabaseTools

Public function Cr&#101;ateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)
"建立数据库文件
"If DbVer is 0 Then Cr&#101;ate Access97 dbFile
"If DbVer is 1 Then Cr&#101;ate Access2000 dbFile
On error resume Next
If Right(SavePath,1)<>"\" o&#114; Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) &amp; "\"
If Left(dbFileName,1)="\" o&#114; Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))
If DbExists(SavePath &amp; dbFileName) Then
Response.Write ("对不起,该数据库已经存在!")
Cr&#101;ateDBfile = False
Else
Dim Ca
Set Ca = Server.Cr&#101;ateObject("ADOX.Catalog")
If Err.number<>0 Then
Response.Write ("无法建立,请检查错误信息
" &amp; Err.number &amp; "
" &amp; Err.Description)
Err.Clear
Exit function
End If
If DbVer=0 Then
call Ca.Cr&#101;ate("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" &amp; SavePath &amp; dbFileName)
Else
call Ca.Cr&#101;ate("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; SavePath &amp; dbFileName)
End If
Set Ca = Nothing
Cr&#101;ateDBfile = True
End If
End function

Public function CompactDatabase(byVal dbFileName,byVal DbVer,byVal SavePath)
"压缩数据库文件
"0 为access 97
"1 为access 2000
On Error resume next
If Right(SavePath,1)<>"\" o&#114; Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) &amp; "\"
If Left(dbFileName,1)="\" o&#114; Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))
If DbExists(SavePath &amp; dbFileName) Then
Response.Write ("对不起,该数据库已经存在!")
CompactDatabase = False
Else
Dim Cd
Set Cd =Server.Cr&#101;ateObject("JRO.JetEngine")
If Err.number<>0 Then
Response.Write ("无法压缩,请检查错误信息
" &amp; Err.number &amp; "
" &amp; Err.Description)
Err.Clear
Exit function
End If
If DbVer=0 Then
call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" &amp; SavePath &amp; dbFileName,"Provider=Microsoft.Jet.OLEDB.3.51;Data
Source=" &amp; SavePath &amp; dbFileName &amp; ".bak.mdb;Jet OLEDB;Encrypt Database=True")
Else
call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp;
SavePath &amp; dbFileName,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp;
SavePath &amp; dbFileName &amp; ".bak.mdb;Jet OLEDB;Encrypt Database=True")
End If
"删除旧的数据库文件
call Del&#101;teFile(SavePath &amp; dbFileName)
"将压缩后的数据库文件还原
call RenameFile(SavePath &amp; dbFileName &amp; ".bak.mdb",SavePath &amp; dbFileName)
Set Cd = False
CompactDatabase = True
End If
end function

Public function DbExists(byVal dbPath)
"查找数据库文件是否存在
On Error resume Next
Dim c
Set c = Server.Cr&#101;ateObject("ADODB.Connection")
c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; dbPath
If Err.number<>0 Then
Err.Clear
DbExists = false
else
DbExists = True
End If
set c = nothing
End function

Public function AppPath()
"取当前真实路径
AppPath = Server.MapPath("./")
End function

Public function AppName()
"取当前程序名称
AppName = Mid(Request.ServerVariables("SCRIPT_NAME"),(InStrRev(Request.ServerVariables("SCRIPT_NAME") ,"/",-1,1))+1,Len(Request.ServerVariables("SCRIPT_NAME")))
End Function

Public function Del&#101;teFile(filespec)
"删除一个文件
Dim fso
Set fso = Cr&#101;ateObject("Scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("删除文件发生错误!请查看错误信息
" &amp; Err.number &amp; "
" &amp; Err.Description)
Err.Clear
Del&#101;teFile = False
End If
call fso.Del&#101;teFile(filespec)
Set fso = Nothing
Del&#101;teFile = True
End function

Public function RenameFile(filespec1,filespec2)
"修改一个文件
Dim fso
Set fso = Cr&#101;ateObject("Scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("修改文件名时发生错误!请查看错误信息
" &amp; Err.number &amp; "
" &amp; Err.Description)
Err.Clear
RenameFile = False
End If
call fso.CopyFile(filespec1,filespec2,True)
call fso.Del&#101;teFile(filespec1)
Set fso = Nothing
RenameFile = True
End function

End Class
%>

Tags: access

asp模板引擎终结者(WEB开发之ASP模式)

作者: 孙立 Email: 17bizAT126.com
写于:2006/3/5
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://sunli.cnblogs.com/a...
关键词:ASP 模板
摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一 般ASP模板加载模板文件(加载组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。
摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载
组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。
内容:

内容:
当前,WEB开发已经变得非常火爆,因为各种应用,已经约来越要求表现层和逻辑层的分离.ASP和HTML夹在一起程序将变得难于维护,可读性也差。在PHP领域,模板引擎已经非常普遍,如phplib,SMARTY,等等.有使用替换方式的,也有编译方式的(SMARTY),它们都较好的实现了逻辑层和表现层的分离.由于PHP的影响,在ASP界有人借鉴phplib等使用替换的方法开发出asp的模板类,由于ASP在字符处理上性能并不是很强大,所以在速度上受到影响,这样的模板在目前的应用也不是很广泛。如:

1<!--template.html-->
2<html>
3<head>
4<title>{$title}</title>
5</head>
6<body>
7{$body}
8</body>
9</html>
1<!--Template.asp-->
2<%
3TemplateCode=Load("template.html")"自定义函数,装载模板文件到TemplateCode
4TemplateCode=Replace(TemplateCode,"{$title}","asp模板引擎终结者")"替换模板
5TemplateCode=Replace(TemplateCode,"{$body}","asp模板引擎终结者内容")"替换模板
6Response.Write TemplateCode
7%> 上面的例子只是初步展示了当前ASP模板的思想,有ASP版的CMS系统已经嵌入了对模板的逻辑控制,虽然能够实现逻辑和界面的分离,但是这种模板存在的问题就是模板需要每次都用ASP解析一次,程序相当于解析两次,而且当要替换的内容很多的时候,将会降低性能.而且装载模板需要服务器支持一种组件(FSO,ADODB,XMLHTTP均可实现).
借鉴于编译型的模板,我在ASP中引进这种思路.提出一种应用在ASP中的功能和性能都很优良的模板体系.下面用代码表示:
1 <!--template.html-->
2 <html>
3 <head>
4 <title><%=title%></title>
5 </head>
6 <body>
7 <!--<%
8 "If逻辑控制,当然这里对于FOR,While 循环也一样处理,是不是觉得很简单呢,
9 "对逻辑进行html注释,在DW(Dreamweaver)下就不会应为逻辑控制的asp占位符产生变形,对于其他的变量将显示一个asp标记,便于修改
10 IF Catalog="music" Then
11 %>-->
12 <%=music%>
13 <!--<%Else%>-->
14 <%=book%>
15 <!--<%End If%>-->
16 </body>
17 </html>
1 <!--Template.asp-->
2 <%
3 title="asp模板引擎终结者"
4 Catalog="music"
5 music="音乐"
6 book="书"
7 %>
8 <!--#include file="template.html"-->思路:asp文件进行常规的逻辑处理,运算,不用管显示层,当然需要显示的变量需要和显示层结合(PHP也一样),在模板文件中用<%%>直接控制变量的显示和逻辑的控制,不显示的逻辑控制符用html注释符<!---->注释掉,当然,不注释也是可以的.这样在ASP文件的最后"<!--#include file="template.html"-->"就实现了模板和ASP文件的结合,实现了代码和表现层的分离,这里并没有用ASP去Load模板,然后替换,浪费不必要ASP资源.这些处理全部都省去了。你会发现写ASP文件变得更加方便,因为你再也不需要在其中控制替换,逻辑显示的行为。在ASP中直接执行肯定比替换要来得迅速和稳定.况且,加载模板的时候你必须还要加载一个组件.
写到这里,你也许明白了这种模板的精髓了,它只是一种设计模式,不是一个用模板类来处理的模板引擎。

Tags: 模板

转使用模板实现ASP代码与页面分离

 每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显示方式绞合,使得代码难以理解、难以修改;程序编写必须在美工之后,成为项目瓶颈;整合的程序代码和HTML静态页面时,花费大量的时间才能得到理想的效果,兼作了美工。的确,用脚本语言开发Web应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥。
  其它的脚本语言,如JSP、PHP都有自己的解决方案,ASP的后一代产品ASP.NET也实现了代码与页面,似乎直接过渡到ASP是不错的选择。但是总有这样或那样的原因让我们不能或暂时不能放弃ASP直奔.NET大营。从公司角度来看,转换语言是一笔不少的投资,包括雇佣熟手.NET程序员、培训原有程序员、开发工具的转型、开发风格的转型、界面风格转变、接口风格、软件架构、文档、开发流程等等;这还意味着原有的代码必须在新语言环境里重写以实现最佳的效果和稳定性;同时将直接影响这段时间内项目的进度,更有可能导致个别程序员出走。由此看来在您决定转换语言之前,在原基础上寻求一种解决方案,才是最好的选择。
  PHP通过模板实现代码与页面,可供选择的有FastTemplate、PHPLIB、Smarty等多种,其中PHPLIB的影响最大、使用最多。既然如此,我们直接把它搬到ASP来,对于同时使用PHP和ASP的公司还有很有好处:一、美工处理页面时,不管将要套用PHP还是ASP,处理方式是一样,无须经过培训;二、程序员编写代码时,两种语言间的思路接近或一致,相同功能在两种语言实现时,只需拷贝过来略作修改即可,保证了工作效率和项目进度。

1、模板类的设计
  实现代码封装成为模板类,即是为了与PHPLIB兼容,也使得代码方便管理与扩展。
  模板类要实现的目标为:从模板文件中读入显示的HTML代码,将这些显示代码中需要动态数据的地方替换为ASP程序运算所得出的数据,然后按照一定的顺序输出。其中,替换的部分可以自由的设定。因此它必须完成如下任务:
·从模板文件中读取显示用的HTML代码。
·将模板文件和实际生成的数据结合,生成输出的结果。
·允许同时处理多个模板。
·允许模板的嵌套。
·允许对模板中的某个单独的部分进行处理。

实现方法:
采用FSO读取模板文件
采用正则替换实现模板文件和数据的结合
处理多个模板用数组存储来实现。
模板的嵌套的实现主要的想法是:将模板和输出(任何中间的分析结果)一视同仁,都可拿来做替换,即可实现。
单独部分的处理的通过在模板文件中设定标注,然后在正则替换中结合标注来控制,实现部分替换。

2、模板类的实现
  给出具体代码之前,先把主要函数列出,用过PHPLIB的朋友应该对此很熟悉了:
  1)Public Sub set_root(ByVal Value) 设定模板默认目录
  2)Public Sub set_file(ByVal handle,ByVal filename) 读取文件
  3)Public Sub set_var(ByVal Name, ByVal Value, ByVal Append) 设置映射数据-替换变量
  4)Public Sub unset_var(ByVal Name) 取消数据映射
  5)Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name) 设置数据块
  6)Public Sub set_unknowns(ByVal unknowns) 设定未指定映射的标记处理方式
  7)Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append) 执行模板文件与数据的结合
  8)Public Sub p(ByVal Name) 输出处理结果

实现代码:
<%
"================================================================
" CLASS NAME: kktTemplate ASP页面模板对象
" DESIGN BY : 彭国辉
" DATE: 2004-07-05
" WEBSITE: http://kacarton.yeah.net/
" BLOG: http://blog.csdn.net/nhcon...
" EMAIL: kacarton@sohu.com
"
" 本对象中使用了set_var、set_block等命名方法是为了兼容phplib
"文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持!
"================================================================

Class kktTemplate

Private m_FileName, m_Root, m_Unknowns, m_LastError, m_HaltOnErr
Private m_ValueList, m_BlockList
Private m_RegExp
" 构造函数
Private Sub Class_Initialize
Set m_ValueList = Cr&#101;ateObject("Scripting.Dictionary")
Set m_BlockList = Cr&#101;ateObject("Scripting.Dictionary")
set m_RegExp = New RegExp
m_RegExp.IgnoreCase = True
m_RegExp.Global = True
m_FileName = ""
m_Root = ""
m_Unknowns = "remove"
m_LastError = ""
m_HaltOnErr = true
End Sub

" 析构函数
Private Sub Class_Terminate
Set m_RegExp = Nothing
Set m_BlockMatches = Nothing
Set m_ValueMatches = nothing
End Sub

Public Property Get ClassName()
ClassName = "kktTemplate"
End Property

Public Property Get Version()
Version = "1.0"
End Property

Public Sub About()
Response.Write("kktTemplate ASP页面模板类<br>" &amp; vbCrLf &amp;_
"程序设计:彭国辉 2004-07-05<br>" &amp; vbCrLf &amp;_
"个人网站:<a href="http://kacarton.yeah.net&a... &amp; vbCrLf &amp;_
"电子邮件:<a href="mailto:kacarton@sohu.com">kacarton@sohu.com</a><br>")
End Sub

"检查目录是否存在
Public Function FolderExist(ByVal path)
Dim fso
Set fso = Cr&#101;ateObject("Scripting.FileSystemObject")
FolderExist = fso.FolderExists(Server.MapPath(path))
Set fso = Nothing
End Function
"读取文件内容
Private Function LoadFile()
Dim Filename, fso, hndFile
Filename = m_Root
If Right(Filename, 1)<>"/" And Right(Filename, 1)<>"\" Then Filename = Filename &amp; "/"
Filename = Server.MapPath(Filename &amp; m_FileName)
Set fso = Cr&#101;ateObject("Scripting.FileSystemObject")
If Not fso.FileExists(Filename) Then ShowError("模板文件" &amp; m_FileName &amp; "不存在!")
set hndFile = fso.OpenTextFile(Filename)
LoadFile = hndFile.ReadAll
Set hndFile = Nothing
Set fso = Nothing
If LoadFile = "" Then ShowError("不能读取模板文件" &amp; m_FileName &amp; "或文件为空!")
End Function

"处理错误信息
Private Sub ShowError(ByVal msg)
m_LastError = msg
Response.Write "<font color=red style="font-size;14px"><b>模板错误:" &amp; msg &amp; "</b></font><br>"
If m_HaltOnErr Then Response.End
End Sub

"设置模板文件默认目录
"Ex: kktTemplate.set_root("/tmplate")
" kktTemplate.Root = "/tmplate"
" root = kktTemplate.get_root()
" root = kktTemplate.Root
"使用类似set_root这样的命名方法是为了兼容phplib,以下将不再重复说明
Public Sub set_root(ByVal Value)
If Not FolderExist(Value) Then ShowError(Value &amp; "不是有效目录或目录不存在!")
m_Root = Value
End Sub
Public Function get_root()
get_root = m_Root
End Function
Public Property Let Root(ByVal Value)
set_root(Value)
End Property
Public Property Get Root()
Root = m_Root
End Property

"设置模板文件
"Ex: kktTemplate.set_file("hndTpl", "index.htm")
"本类不支持多模板文件,handle为兼容phplib而保留
Public Sub set_file(ByVal handle,ByVal filename)
m_FileName = filename
m_BlockList.Add Handle, LoadFile()
End Sub
Public Function get_file()
get_file = m_FileName
End Function
" Public Property Let File(handle, filename)
" set_file handle, filename
" End Property
" Public Property Get File()
" File = m_FileName
" End Property

"设置对未指定的标记的处理方式,有keep、remove、comment三种
Public Sub set_unknowns(ByVal unknowns)
m_Unknowns = unknowns
End Sub
Public Function get_unknowns()
get_unknowns = m_Unknowns
End Function
Public Property Let Unknowns(ByVal unknown)
m_Unknowns = unknown
End Property
Public Property Get Unknowns()
Unknowns = m_Unknowns
End Property

Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name)
Dim Matches
m_RegExp.Pattern = "<!--\s+BEGIN " &amp; BlockTag &amp; "\s+-->([\s\S.]*)<!--\s+END " &amp; BlockTag &amp; "\s+-->"
If Not m_BlockList.Exists(Parent) Then ShowError("未指定的块标记" &amp; Parent)
set Matches = m_RegExp.Execute(m_BlockList.Item(Parent))
For Each Match In Matches
m_BlockList.Add BlockTag, Match.SubMatches(0)
m_BlockList.Item(Parent) = Replace(m_BlockList.Item(Parent), Match.Value, "{" &amp; Name &amp; "}")
Next
set Matches = nothing
End Sub

Public Sub set_var(ByVal Name, ByVal Value, ByVal Append)
Dim Val
If IsNull(Value) Then Val = "" Else Val = Value
If m_ValueList.Exists(Name) Then
If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name) &amp; Val _
Else m_ValueList.Item(Name) = Val
Else
m_ValueList.Add Name, Value
End If
End Sub

Public Sub unset_var(ByVal Name)
If m_ValueList.Exists(Name) Then m_ValueList.Remove(Name)
End Sub

Private Function InstanceValue(ByVal BlockTag)
Dim keys, i
InstanceValue = m_BlockList.Item(BlockTag)
keys = m_ValueList.Keys
For i=0 To m_ValueList.Count-1
InstanceValue = Replace(InstanceValue, "{" &amp; keys(i) &amp; "}", m_ValueList.Item(keys(i)))
Next
End Function

Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append)
If Not m_BlockList.Exists(BlockTag) Then ShowError("未指定的 块标记" &amp; Parent)
If m_ValueList.Exists(Name) Then
If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name) &amp; InstanceValue(BlockTag) _
Else m_ValueList.Item(Name) = InstanceValue(BlockTag)
Else
m_ValueList.Add Name, InstanceValue(BlockTag)
End If
End Sub

Private Function finish(ByVal content)
Sel&#101;ct Case m_Unknowns
Case "keep" finish = content
Case "remove"
m_RegExp.Pattern = "\{[^ \t\r\n}]+\}"
finish = m_RegExp.Replace(content, "")
Case "comment"
m_RegExp.Pattern = "\{([^ \t\r\n}]+)\}"
finish = m_RegExp.Replace(content, "<!-- Template Variable $1 undefined -->")
Case Else finish = content
End Sel&#101;ct
End Function

Public Sub p(ByVal Name)
If Not m_ValueList.Exists(Name) Then ShowError("不存在的标记" &amp; Name)
Response.Write(finish(m_ValueList.Item(Name)))
End Sub
End Class
%>

3、使用例子
  下面举三个例子进行说明。
1)简单的值替换
模板文件为myTemple.tpl,内容:
<html><title>ASP模板简单替换</title><body>
祝贺!你赢了一辆{some_color}法拉利!
</body>

下面是ASP代码(kktTemplate.inc.asp就是上面给出的模板类):
<!--#INCLUDE VIRTUAL="kktTemplate.inc.asp"-->
<%
dim my_color, kkt
my_color = "红色的"
set kkt = new kktTemplate "创建模板对象
kkt.set_file "hndKktTemp", "myTemple.tpl" "设置并读取模板文件myTemple.tpl
kkt.set_var "some_color", my_color, false "设置模板变量 some_color = my_color的值
kkt.parse "out", "hndKktTemp", false "模板变量 out = 处理后的文件
kkt.p "out" "输出out的内容
set kkt = nothing "销毁模板对象
%>

执行后输出为:
<html><title>ASP模板简单替换</title><body>
祝贺!你赢了一辆红色的法拉利!
</body>

2)循环块演示例子
模板文件myTemple2.tpl:
<html><title>ASP模板-块的演示</title><body>
<table cellspacing="2" border="1"><tr><td>下面的动物您喜欢哪一种</td></tr>
<!-- BEGIN AnimalList -->
<tr><td><input type="radio" name="chk">{animal}</td></tr>
<!-- END AnimalList -->
</table>
</body>

ASP代码:
<!--#INCLUDE VIRTUAL="kktTemplate.inc.asp"-->
<%
dim animal, kkt, i
animal = Array("小猪","小狗","小强")
set kkt = new kktTemplate
kkt.set_file "hndKktTemp", "myTemple2.tpl"
kkt.set_block "hndKktTemp", "AnimalList", "list"
for i=0 to UBound(animal)
kkt.set_var "animal", animal(i), false
kkt.parse "list", "AnimalList", true
next
kkt.parse "out", "hndKktTemp", false
kkt.p "out"
set kkt = nothing
%>

执行结果:
<html><title>ASP模板-块的演示</title><body>
<table cellspacing="2" border="1"><tr><td>下面的动物您喜欢哪一种</td></tr>
<tr><td><input type="radio" name="chk">小猪</td></tr>
<tr><td><input type="radio" name="chk">小狗</td></tr>
<tr><td><input type="radio" name="chk">小强</td></tr>
</table>
</body>


3)嵌套块演示
模板文件myTemple3.tpl:
<html><title>ASP模板-嵌套块演示</title>
<body><table width="400" border="1" bordercolor="#000000">
<tr><td><div align="center">{myname}测试</div></td></tr>
<tr><td>我的动植物园:</td> </tr>
<!-- BEGIN animalList -->
<tr><td>{animal}</td></tr>
<!-- BEGIN plantList -->
<tr><td>&amp;nbsp;&amp;nbsp;{plant}</td></tr>
<!-- END plantList -->
<!-- END animalList -->
</table>
</body>
</html>

ASP代码:
<!--#INCLUDE VIRTUAL="kktTemplate.inc.asp"-->
<%
dim my_color, kkt, myname, animal, plant
set kkt = new kktTemplate
myname = "kktTemplate block test..."
animal = array("动物", "植物")
plant = array(array("小猪","小白","小强"), array("玫瑰","向日葵"))

kkt.set_file "hndKktTemp", "myTemple3.tpl"
kkt.set_var "myname", myname, false
kkt.set_block "hndKktTemp", "animalList", "a"
kkt.set_block "animalList", "plantList", "p"

for i=0 to UBound(animal)
kkt.set_var "animal", animal(i), False
kkt.unset_var "p"
"kkt.set_var "p", "", false
for j=0 to UBound(plant(i))
kkt.set_var "plant", plant(i)(j), false
kkt.parse "p", "plantList", true
next
kkt.parse "a", "animalList", true
next
kkt.parse "out", "hndKktTemp", false
kkt.p "out"
%>

执行结果:
<html><title>ASP模板-嵌套块演示</title>
<body><table width="400" border="1" bordercolor="#000000">
<tr><td><div align="center">kktTemplate block test...测试</div></td></tr>
<tr><td>我的动植物园:</td> </tr>
<tr><td>动物</td></tr>
<tr><td>&amp;nbsp;&amp;nbsp;小猪</td></tr>
<tr><td>&amp;nbsp;&amp;nbsp;小白</td></tr>
<tr><td>&amp;nbsp;&amp;nbsp;小强</td></tr>
<tr><td>植物</td></tr>
<tr><td>&amp;nbsp;&amp;nbsp;玫瑰</td></tr>
<tr><td>&amp;nbsp;&amp;nbsp;向日葵</td></tr>
</table>
</body>
</html>

本文提及的所有代码可从此处下载:http://www.freewebs.com/ka...

4、小结
  本文主要介绍了基于ASP利用模板类实现代码与页面分离的方法,当然还有其它更好的解决方案。本文旨在抛砖引玉各位读者、WEB开发参与进来,多提宝贵意见,多作交流,共同进步!

Tags: 模板

转zblogASP模板技术一二三

From http://www.rainbowsoft.org...

这几天一直在考虑模板的问题,由于以前对模板技术不精的缘故所以Z-Blog的模板实现不太好。鉴于要在8月份过完之前结束Z-Blog的开发,所以开始了对模板系统的改造。

1.简单的模板实现
直接用Replace替换{$变量},这是最简单的,用正则表达式所达到的效果会更好的。加载文档,替换变量,输出并保存文件,套用一句话:这东西做起来“一点技术含量都没有”。

Template和JSP技术
http://www.zahui.com/html/...
蓝色理想 - ASP TO HTML WITH TEMPLATE
http://www.blueidea.com/te...

2.包含逻辑功能的模板实现
PHP下有PHPLIB Template和FastTemplate,用模板类解析特定的字特串实现逻辑控制。在PHP的世界中已经十分成熟,也有人在ASP下做了仿制的类,可以实现相应的功能,不过我对这种技术不太感冒。

相关文章:
使用模板实现ASP代码与页面分离
http://blog.csdn.net/nhcon...
ASP打造内容管理系统之模板技术乱谈
http://www.kongjie.com/fil...
在PHP世界中选择最合适的模板
http://www-128.ibm.com/dev...

3.以XML+XSLT为基础的模板实现
以XSLT做模板的应用相当丰富,如果在Z-Blog中用XSTL做模板转换XML数据源,生成HTML文件,估计是可行的,况且我在平日对XML十分喜欢,亲睐有加,试一试也可以。可能效率不高,运行时间比较长,对不熟悉XML和XSLT语法的人来说采用XSLT做模板修改起来难度会大一点,希望不会有人向我扔臭鸡蛋。看来又要恶补XML、XSLT、XPath...

相关文章:
变革性的Java Web模板技术
http://blog.chinaunix.net/...

Tags: 模板, tohtml

Records:12312345678910»