首 页 | 精品电影 | 音乐天堂 | 在线游戏 | Flash MTV | 三湘书屋 | 幽默笑话 | 三湘图库 | 美女写真 | IT知识库 | QQ贴图 | 加入书签

网页制作网络编程图形图象操作系统冲浪宝典软件教学网络安全认证考试通信技术电子商务业内动态书籍教程原码

最近更新 文章分类 多媒体类 精品软件

本站搜索:
您的位置:三湘时空 -> IT知识库 -> 文章分类 -> ASP技巧 -> 对ASP动态包含文件方法的改进
对ASP动态包含文件方法的改进


文章类别:ASP技巧 来源: 作者: 发表日期:2006-12-7 字体:[ ]

小游戏 | 在线影院 | 幽默笑话 | 源码下载 | Flash MTV | 音乐试听 | 书屋 | 美女写真

  ASP 本身不支持动态包含文件,现在的动态包含是通过 FSO 把被包含的文件合并到主文件里再运行。以下也有把形如 <!--#include file="filename.asp" --> 的普通包含文件方式称作“传统引用”,用函数实现的动态包含文件称作“动态引用”。常见的程序如下:

Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd

set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(filename))
content=f.ReadAll
f.close
set f=nothing
set fso=nothing

set re=new RegExp
re.pattern="^\s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
do while aspStart>aspEnd+1
Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,content,"%\>")+2
Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
aspStart=inStr(aspEnd,content,"<%")+2
loop
Response.write Mid(content,aspEnd)
set re=nothing
End Function 

  使用范例:include("youinc.asp")

  但这处函数在处理补包含的文件中还有包含文件时就不灵了。我在以上函数的基础上改进出来如下函数,在被包含文件中还有普通的包含文件 <!--#include file="filename.asp" --> 也可正常运行。

Function includeconvert(oRegExp, strFilename, strBlock)
Dim incStart, incEnd, match, oMatches, str, code
'用提取ASP代码的相同方式提取出include 部分的文件名,其余部分原样输出
code = ""
incEnd = 1
incStart = InStr(incEnd,strBlock,"<!--#include ") + 13 '要找个目标字符串<!--#include 正好是13个字符,所以要+13
Do While incStart>incEnd+12 '两个引用间距最小就是连续的--><--#,incStart是从<!--#include起数13个字符,所以要比前一个incEnd要至少多 13-1 得到的>incEnd+12的条件
str = Mid(strBlock,incEnd,incStart-incEnd-13)
str = Replace(str, """", """""") '把单个双引号换成两个双引号
str = Replace(str, VbCr, "")
str = Replace(str, VbLf, "")
str = Replace(str, VbCrLf, "")
code = code & VbCrLf & "Response.Write """ & str & """"
incEnd=InStr(incStart,strBlock,"-->")+3
oRegExp.pattern="(\w+)=""([^""]+)""" '匹配 file="filename.ext" 或 virtual="virtualname.ext",捕捉类型及文件名两个子串
Set oMatches = oRegExp.Execute(Mid(strBlock,incStart,incEnd-incStart-3))
Set match = oMatches(0) '确定只有一组捕捉时,要得到这一组匹配的子串,可以这样做,省去用 For Each match In oMatches …… Next
code = code & include(Mid(strFilename, 1, InStrRev(strFilename, "/")) & match.SubMatches(1)) 'Mid(filename, 1, InStrRev(filename, "/")) 是在被引用的子文件名有路径时,把路径提取出来,加在子文件中传统引用的文件名前面,以找到正确的打开文件路径,因为动态引用时的文件路径是相对主文件而言的。要第二个匹配子串用SubMatches(1)
incStart = InStr(incEnd,strBlock,"<!--#include ")+13
Loop
str = Mid(strBlock,incEnd)
str = Replace(str, """", """""") '把单个双引号换成两个双引号
str = Replace(str, VbCr, "")
str = Replace(str, VbLf, "")
str = Replace(str, VbCrLf, "")
code = code & VbCrLf & "Response.Write """ & str & """"
includeconvert = code
End Function
Function include(filename)
Dim re, content, fso, f, aspStart, aspEnd, code
Set fso=CreateObject("scripting.FileSystemObject")
Set f=fso.OpenTextFile(Server.MapPath(filename))
content=f.ReadAll
f.close
Set f=nothing
Set fso=nothing

code = ""
aspEnd=1
aspStart=InStr(aspEnd,content,"<%")+2
Set re=new RegExp
Do While aspStart>aspEnd+1
'传统引用<!--#inclde 肯定是在ASP代码段以外的,所以先转。
code = code & includeconvert (re, filename, Mid(content,aspEnd,aspStart-aspEnd-2))
aspEnd=InStr(aspStart,content,"%\>")+2
re.pattern="^\s*=" '这段正则替换原来是把 <% = str % > 换回成标准的 <%Response.Write str % >
code = code & VbCrLf & re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write ") 'ASP块前面再加回车换行,以避免连接块之间多个 Response.Write在同一行的错误
aspStart=InStr(aspEnd,content,"<%")+2
Loop
code = code & includeconvert (re, filename, Mid(content,aspEnd))
Set re=nothing
include = code
End Function

  方便起见,以上函数最终返回的是整合了包含文件的整个 ASP 代码,使用时还要再用 Execute 执行之,即使用时需要:Execute(include("file.asp"))。

  以上函数对被包含文件与主文件同一路径时测试通过,未对被包含文件与主文件路径不同的情况做进一步容错,时间有限,欢迎有兴趣的朋友提出意见和改进。

上一篇:恢复误删数据(SQL Server 2000)--Log Explorer 下一篇:Photoshop基础教程:跟我学调色练习12-怀旧色调的调法
本栏目热门文章
·WEB打印设置解决方案二(利用ScriptX.cab控件改变IE打印 2005-10-4
·WEB打印设置解决方案三(FileSystem组件实现WEB打印) 2005-10-4
·automation服务器不能创建对象 2006-1-6
·使用VBScript操作Html复选框(CheckBox)控件 2005-10-4
·HTTP_REFERER的工作方式 2005-10-4
·使用ActiveX控件开发网页常见的问题 2005-10-4
·XMLHTTP Get HTML页面时的中文乱码之完全客户端Scri 2005-10-4
·用ASP和Microsoft.XMLDOM分析远程XML文件 2005-10-4
·关于 aspsmartupload 注册问题 2005-10-4
·判断checkbox是否至少有选择一项 2005-10-8
新近更新文章
·实用的ASP连接数据库的函数 2006-12-7
·整站二进制数据库文件还原 2006-12-7
·对ASP动态包含文件方法的改进 2006-12-7
·ASP调用带参数存储过程的几种方式 2006-12-7
·PRB:ASP 返回“Operation Must Use an U 2006-11-20
·支持多风格变换的ASP分页类 2006-11-20
·ASP实现可显示和隐藏的树型菜单 2006-11-20
·ASP二进制流方法隐藏图片文件真实地址 2006-11-20
·将内容自动添加到指定文本域的JS 2006-11-16
·教你巧妙利用.mdb后缀数据库做后门 2006-11-16
首 页 | 软件发布 | 广告联系 | 下载帮助 | 意见反馈 | 网站地图
  CopyRight? 2002-2004 WWW.SXSKY.NET? All Rights Reserved
三湘时空 站长QQ:82675303 Email: