很多人的网站采用了UTF-8代码,但是风讯采用GB2312,所以生成页面后变成了乱码,从IE搜索中找到2个函数,不过他们采用的不是FSO,以下给出让FOOSUN支持UTF8的一种简单解决方案,这种方法不是最省资源的,也没有在原来的FSO框架下完成,但是却让代码做了比较小的改动.
首先将你的模板用记事本打开,另存储为UTF-8代码格式,最好去掉装饰性符号字符,有可能出现内码冲突造成乱码
然后打开 admin/publicsite/public_refresh.asp在页面尾部添加2个函数
'-------------------------------------------------
'函数名称:ReadTextFile
'作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件
'----------------------------------------------------
function ReadFromTextFile (FileUrl,CharSet)
dim str,stm
set stm=server.CreateObject("adodb.stream")
stm.Type=2 '以本模式读取
stm.mode=3
stm.charset=CharSet
stm.open
stm.loadfromfile server.MapPath(FileUrl)
str=stm.readtext
stm.Close
set stm=nothing
ReadFromTextFile=str
end function
'-------------------------------------------------
'函数名称:WriteToTextFile
'作用:利用AdoDb.Stream对象来写入UTF-8格式的文本文件
'-------------------------------------------------
Sub WriteToTextFile (FileUrl,Str,CharSet)
dim stm
set stm=server.CreateObject("adodb.stream")
stm.Type=2 '以本模式读取
stm.mode=3
stm.charset=CharSet
stm.open
stm.WriteText str
stm.SaveToFile server.MapPath(FileUrl),2
stm.flush
stm.Close
set stm=nothing
end Sub
这两个函数在网上很好找,不是我的杰作,纯属挪用,不过原作者我也不知道了
接下来我们修改一个函数,灰色部分是注释或者通过注释屏蔽掉以前的语句,红色部分是新添加的语句:
Function Refresh_index(Sys_flag)
Dim patrn(1),strng,f_PLACE_OBJ,p_HTML_File_Save_Path_Str,p_HTML_File_Save_Phy_Path_Str
Dim p_FSO_OBJ,p_FILE_OBJ,p_FILE_STREAM_OBJ,p_File_Content,p_INDEX_DIC_OBJ,p_Templet,p_Phy_Templet,p_FileName
patrn(0)="</head>"
patrn(1)="<body"
strng=Get_JS_CopyRight("NewsId")
if Request.Cookies("FoosunSUBCookie")("FoosunSUB" & Sys_flag) = "1" then
Select Case Sys_flag
Case "NS"
If Request.Cookies("FoosunNSCookies")("FoosunNSNewsDir")="" Then
NSConfig_Cookies
End If
p_Templet = p_SYS_ROOT_DIR & Request.Cookies("FoosunNSCookies")("FoosunNSIndexTemplet")
p_HTML_File_Save_Path_Str = p_SYS_ROOT_DIR & "/" & Request.Cookies("FoosunNSCookies")("FoosunNSNewsDir")
p_FileName=Request.Cookies("FoosunNSCookies")("FoosunNSIndexPage")
Case "MS"
If Request.Cookies("FoosunMSCookies")("FoosunMSDir")="" Then
NSConfig_Cookies
End If
p_Templet = p_SYS_ROOT_DIR & Request.Cookies("FoosunMSCookies")("FoosunMSIndexTemplet")
p_HTML_File_Save_Path_Str = p_SYS_ROOT_DIR & "/"& Request.Cookies("FoosunMSCookies")("FoosunMSDir")
p_FileName="index.htm"
Case "MF"
If Request.Cookies("FoosunMFCookies")("FoosunMFIndexTemplet")="" Then
MFConfig_Cookies
End If
p_Templet = p_SYS_ROOT_DIR & Request.Cookies("FoosunMFCookies")("FoosunMFIndexTemplet")
p_HTML_File_Save_Path_Str = p_SYS_ROOT_DIR
p_FileName=Request.Cookies("FoosunMFCookies")("FoosunMFIndexFileName")
Case Else
Refresh_index="No$$"
Exit Function
End Select
Else
Refresh_index="No$$"
Exit Function
End If
p_Phy_Templet = Server.MapPath(p_Templet)
Set p_FSO_OBJ = Server.CreateObject(G_FS_FSO)
If p_FSO_OBJ.FileExists(p_Phy_Templet) = False Then
p_File_Content = "模板不存在,请添加模板后再生成!"
Else
'支持UTF-8内码
p_File_Content = ReadFromTextFile (p_Templet,"UTF-8")
'支持UTF-8内码
'原来的代码
'Set p_FILE_OBJ = p_FSO_OBJ.GetFile(p_Phy_Templet)
'Set p_FILE_STREAM_OBJ = p_FILE_OBJ.OpenAsTextStream(1)
'If Not p_FILE_STREAM_OBJ.AtEndOfStream Then
' p_File_Content = p_FILE_STREAM_OBJ.ReadAll
'Else
' p_File_Content = "模板内容为空"
'End If
'原来的代码
End If
Set p_FILE_STREAM_OBJ = Nothing
Set p_FILE_OBJ = Nothing
Set p_FSO_OBJ = Nothing
Set p_INDEX_DIC_OBJ = Replace_All_Flag(p_File_Content,"",Sys_flag)
p_File_Content = p_INDEX_DIC_OBJ.Item("-3")
Set p_INDEX_DIC_OBJ = Nothing
'If p_HTML_File_Save_Path_Str<>"" Then
' p_HTML_File_Save_Phy_Path_Str = Server.MapPath(p_HTML_File_Save_Path_Str)
' CreatePath p_HTML_File_Save_Phy_Path_Str,Server.MapPath("/")
'End If
Rem 建立正则对象
Set f_PLACE_OBJ = New RegExp
Rem ============
Rem 加入版权信息和关键JS文件(正则搜索)
f_PLACE_OBJ.Pattern = patrn(0)
f_PLACE_OBJ.IgnoreCase = True
f_PLACE_OBJ.Global = False
f_PLACE_OBJ.Multiline = True
If f_PLACE_OBJ.Test(p_File_Content) Then
'本句将增加的代码输出于</head>前,用于对XHTML1.1规范的支持开始
p_File_Content=f_PLACE_OBJ.Replace(p_File_Content,strng&vbNewLine&patrn(0))
'p_File_Content=f_PLACE_OBJ.Replace(p_File_Content,patrn(0)&vbNewLine&strng)
'本句将增加的代码输出于</head>前,用于对XHTML1.1规范的支持结束
Else
f_PLACE_OBJ.Pattern = patrn(1)
If f_PLACE_OBJ.Test(p_File_Content) Then
p_File_Content=f_PLACE_OBJ.Replace(p_File_Content,patrn(1)&vbNewLine&strng)
Else
p_File_Content=strng&vbNewLine&p_File_Content
End If
End If
Rem ===================================
'utf-8支持
p_HTML_File_Save_Path_Str = p_HTML_File_Save_Path_Str & "/" & p_FileName
call WriteToTextFile (p_HTML_File_Save_Path_Str,p_File_Content,"utf-8")
'utf-8支持
'原来的代码
'AllSaveFile p_File_Content,p_HTML_File_Save_Path_Str&"/"&p_FileName
'原来的代码
If Err Then
Response.Write "Err$1$"&Err.Description
Response.End()
ElseIf Sys_flag="MF" Then
Response.write Sys_flag&"$1$2"
Else
Response.write "End$1$2"
End If
End Function
现在生成文件就是UTF-8的了,而系统没有更改GB2312内码,至于类似搜索等功能程序页面,用到哪个转一下即可,反正ACCESS/SQLSERVER是UNICODE的,随你怎么用,以上没有删除原来的代码,只是注释掉了不用的,用了2个服务器组件,虽然效率不是最高的,但改动很小便于操作,对于模板固定的用户可以直接将FSO判断模板的语句去掉,直接调用生成功能