靜態網頁簡易生成方法

尛沫發表於2014-05-07

目前要完成靜態頁面生成的主要方法有簡單的模板替換、常見的ASP+FSO等,接下來介紹一種更為簡單的方法,原理就是藉助XmlHttp物件獲取目標頁面的原始碼,然後寫入到靜態網頁檔案中。

Dim filename,fso,fout
filename="index.html"        

Set fso=server.CreateObject("Scripting.FileSystemObject")
path=server.MapPath(filename)      
Set fout=fso.CreateTextFile(path)  
fout.WriteLine("<!--This page is created by program on "&now&" automatically-->")

webstr = getHTTPPage("http://url")
fout.WriteLine(webstr)
fout.close
set fout=nothing
set fso=nothing     

生成後讓網頁自動關閉:

Response.Write("<script>")
Response.Write("function ToClose(){")
Response.Write("window.opener=null;window.close();}")
Response.Write("setTimeout(ToClose,10000);")
Response.Write("</script>")

獲取目標網頁的原始碼:

 Function getHTTPPage(url)
  dim Http
    set Http=server.createobject("MSXML2.XMLHTTP")
    Http.open "GET",url,false
    Http.send()
    if Http.readystate<>4 then 
        exit function
    end if
    getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
    if len(Http.responseBody)<1000 then
        Response.End()
    end if
    set http=nothing
    if err.number<>0 then err.Clear 
End Function

字元轉換,解決中文亂碼問題:

Function BytesToBstr(body,Cset)
    dim objstream
    set objstream = Server.CreateObject("adodb.stream")
    objstream.Type = 1
    objstream.Mode =3
    objstream.Open
    objstream.Write body
    objstream.Position = 0
    objstream.Type = 2
    objstream.Charset = Cset
    BytesToBstr = objstream.ReadText 
    objstream.Close
    set objstream = nothing
End Function

另外可以設定這段程式定時執行,先把程式碼寫到一個ASP檔案裡,然後在另一網頁中使用JS呼叫定時程式,當然還有另外一種方法,就是用Windows的任務計劃,這裡的方法是把下面程式碼寫入一靜態頁中,然後在瀏覽器開啟網頁。

<script>
function run(){
window.open('make_html.asp','_blank');}
setInterval(run,5000);
</script>

在JavaScript中使用XmlHttpRequest物件獲取網頁程式碼的方法,在返回中文的時候會出現亂碼的原因是:

  1. xmlhttp返回的資料預設的字元編碼是utf-8,如果客戶端頁面是gb2312或者其他編碼就會產生亂碼。
  2. post方法提交的資料預設字元編碼也是utf-8,如果伺服器端是gb2312或其他編碼資料就會產生亂碼。

解決方法:

  1. 若客戶端是gb2312編碼,則在伺服器指定輸出流編碼:

    Response.ContentType = "text/html" 
    Response.Charset = "GB2312"
    
  2. 伺服器端和客戶端都使用utf-8編碼。

還有一個常見的編碼問題是URL編碼解碼問題,下面使用JavaScript實現ASP中的UrlEncode和UrlDecode功能,這裡也可以學到JavaScript如何呼叫VBScript的函式。

<script language="vbscript"> 
Function str2asc(strstr) 
   str2asc = hex(asc(strstr)) 
End Function 
Function asc2str(ascasc) 
   asc2str = chr(ascasc) 
End Function 
</script>

本文為Anyforweb技術分享部落格,需要了解網站建設相關,請訪問anyforweb.com。

相關文章