您的位置: 站云中国 » 网站托管 » 为FOOSUN添加UTF-8代码支持
为FOOSUN添加UTF-8代码支持
2012-06-25 17:06 站云中国

很多人的网站采用了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判断模板的语句去掉,直接调用生成功能