让ASP也支持动态include文件
作者:亮亮 来源:亮亮的博客 发布时间:2008-05-08 13:00:00
标签:include,动态,utf8,asp
在blueidea上看到movoin转的一个动态加载include文件代码,接着dnawo又修改了下,我用了dnawo修改后的版本,感觉挺好的,不过当我要include的文件用的是utf-8编码时,并且里有中文时就有错误出现。
相关文章推荐:asp动态调用不同include文件方法
我也没仔看代码,后来我看了下应该是读文件用的是fso的缘故,我就把读代码的改为用adodb.stream,果然没了错误。
一下修改过后的代码:
<%
response.Charset="utf-8"
public include, include_vars
set include = new cls_include
class cls_include
private sub class_initialize()
set include_vars = server.createobject("scripting.dictionary")
end sub
private sub class_deactivate()
arr_variables.removeall
set include_vars = nothing
set include = nothing
end sub
public default function include(byval str_path,byval str_charset)
dim str_source
if str_path <> "" then
str_source = readfile(str_path,str_charset)
if str_source <> "" then
processincludes str_source
convert2code str_source
formatcode str_source
if str_source <> "" then
if request.querystring("debug") = 1 then
response.write str_source
response.end
else
executeglobal str_source
include_vars.removeall
end if
end if
end if
end if
end function
private sub convert2code(str_source)
dim i, str_temp, arr_temp, int_len
if str_source <> "" then
if instr(str_source,"%" & ">") > instr(str_source,"<" & "%") then
str_temp = replace(str_source,"<" & "%","|%")
str_temp = replace(str_temp,"%" & ">","|")
if left(str_temp,1) = "|" then str_temp = right(str_temp,len(str_temp) - 1)
if right(str_temp,1) = "|" then str_temp = left(str_temp,len(str_temp) - 1)
arr_temp = split(str_temp,"|")
int_len = ubound(arr_temp)
if (int_len + 1) > 0 then
for i = 0 to int_len
str_temp = trim(arr_temp(i))
str_temp = replace(str_temp,vbcrlf & vbcrlf,vbcrlf)
if left(str_temp,2) = vbcrlf then str_temp = right(str_temp,len(str_temp) - 2)
if right(str_temp,2) = vbcrlf then str_temp = left(str_temp,len(str_temp) - 2)
if left(str_temp,1) = "%" then
str_temp = right(str_temp,len(str_temp) - 1)
if left(str_temp,1) = "=" then
str_temp = right(str_temp,len(str_temp) - 1)
str_temp = "response.write " & str_temp
end if
else
if str_temp <> "" then
include_vars.add i, str_temp
str_temp = "response.write include_vars.item(" & i & ")"
end if
end if
str_temp = replace(str_temp,chr(34) & chr(34) & " & ","")
str_temp = replace(str_temp," & " & chr(34) & chr(34),"")
if right(str_temp,2) <> vbcrlf then str_temp = str_temp
arr_temp(i) = str_temp
next
str_source = join(arr_temp,vbcrlf)
end if
else
if str_source <> "" then
include_vars.add "var", str_source
str_source = "response.write include_vars.item(""var"")"
end if
end if
end if
end sub
private sub processincludes(str_source)
dim int_start, str_path, str_mid, str_temp
str_source = replace(str_source,"<!-- #","<!--#")
int_start = instr(str_source,"<!--#" & "include")
str_mid = lcase(getbetween(str_source,"<!--#" & "include","-->"))
do until int_start = 0
str_mid = lcase(getbetween(str_source,"<!--","-->"))
int_start = instr(str_mid,"#include")
if int_start > 0 then
str_temp = lcase(getbetween(str_mid,chr(34),chr(34)))
str_temp = trim(str_temp)
str_path = readfile(str_temp)
str_source = replace(str_source,"<!--" & str_mid & "-->",str_path & vbcrlf)
end if
int_start = instr(str_source,"#include")
loop
end sub
private sub formatcode(str_code)
dim i, arr_temp, int_len
str_code = replace(str_code,vbcrlf & vbcrlf,vbcrlf)
if left(str_code,2) = vbcrlf then str_code = right(str_code,len(str_code) - 2)
str_code = trim(str_code)
if instr(str_code,vbcrlf) > 0 then
arr_temp = split(str_code,vbcrlf)
for i = 0 to ubound(arr_temp)
arr_temp(i) = ltrim(arr_temp(i))
if arr_temp(i) <> "" then arr_temp(i) = arr_temp(i) & vbcrlf
next
str_code = join(arr_temp,"")
arr_temp = vbnull
end if
end sub
private function readfile(str_path,str_charset)
dim objfso, objfile
if str_path <> "" then
if instr(str_path,":") = 0 then str_path = server.mappath(str_path)
set objfso = server.createobject("scripting.filesystemobject")
if objfso.fileexists(str_path) then
dim objStream
set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Type = 2
.Mode = 3
.Open
.LoadFromFile str_path
.Charset = str_charset 'set the encoding of the page charset
.Position = 2
readfile = .ReadText()
.Close
end With
set objStream = Nothing
end if
set objfso = nothing
end if
end function
private function getbetween(strdata, strstart, strend)
dim lngstart, lngend
lngstart = instr(strdata, strstart) + len(strstart)
if (lngstart <> 0) then
lngend = instr(lngstart, strdata, strend)
if (lngend <> 0) then
getbetween = mid(strdata, lngstart, lngend - lngstart)
end if
end if
end function
end class
%>
没有仔细斟酌代码,就事论事,用的时候
include "类文件路径","编码"


猜你喜欢
- public static char doVerify(String id) { char pszSrc[]=id.toCharArray(
- 简介  在现在的移动端App中,由于开发效率、需求频繁变更的需求情况下,经常有相关的运营需求,经常要进行更新,如果全部采用
- 本文实例讲述了Selenium鼠标与键盘事件常用操作方法。分享给大家供大家参考,具体如下:Selenium是一个用于Web应用程序测试的工具
- 最近小爬一直思忖着如何将以前写的一些半自动化程序转为全自动化,这其中就涉及到SAP的打开和登录过程。我们都知道,SAP原生的&ldq
- USE masterDECLARE @spid intDECLARE CUR CURSORFOR SELECT spid FROM sysp
- 前言 简述bs4:使用pip install beautifulsoup4将bs4包安装到当前的python解释器环境,使用fro
- 本文实例讲述了Python实现SVN的目录周期性备份方法。分享给大家供大家参考。具体如下:起因:今天用SVN时,不小心把远程SVN服务器上的
- 一、Go语言下载go语言官方下载地址:https://golang.org/dl/找到适合你系统的版本下载,本人下载的是windows版本。
- 在pytorch下,以数万首唐诗为素材,训练双层LSTM神经网络,使其能够以唐诗的方式写诗。代码结构分为四部分,分别为1.model.py,
- 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形
- Vue是当下很流行的前端框架,现在我来分享一下用Vue创建项目的流程1、新建一个文件夹,用来创建Vue项目。2、进入到该文件夹,在地址栏内写
- 一、安装1、安装easy_install工具wget http://peak.telecommunity.com/dist/ez_setup
- 在Python 3.5(含)以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插入字典,但是当你打印字典的Keys列表时,你会发现B
- Python图片处理模块PIL(pillow)pywin32的主要作用1.捕获窗口;2.模拟鼠标键盘动作;3.自动获取某路径下文件列表;4.
- Python命令启动Web服务器实例详解利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入
- privot多对多关系的中间表。PT5框架会自动把privot带上。我们需要隐藏,因为我们不需要privot,而且pritvot也不在我们模
- 随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联
- JDBC连接MySQL数据库关键的四个步骤1、查找驱动程序MySQL目前提供的Java驱动程序为Connection/J,可以从MySQL官
- 为了更好的理解邮件发送功能的实现,要先了解邮件发送系统的大致流程。首先 电子邮件之间的相互发送接受就像 邮局邮件发送
- 前言……最近在学习yolo1、yolo2和yolo3,写这篇博客主要是为了让自己对yolo2的结