1. 程式人生 > >BCB遊戲作坊專欄【http://www.bcbgame.com】

BCB遊戲作坊專欄【http://www.bcbgame.com】

 錯誤型別:
Microsoft VBScript 編譯器錯誤 (0x800A0409)
未結束的字串常量

這樣的錯誤會經常遇見,蒐集整理一下,網頁開發必備良藥,呵呵。


大致分為以下三種情況:
          1.JAVASCRIPT和JSP(或其他網頁)檔案的編碼型別不一致

             現象:

             比如,你的jsp網頁用的編碼格式是utf-8 ,但是你的js檔案用的編碼格式卻是gb2312。這樣檔案內部特殊字元因格式不一致就會在解碼時出現亂碼,從而導致編譯器在未到達引號( "或' )前提前結束,產生“未結束的字串常量”。這種不太容易發現錯誤。

             解決:          

             如果你的js是外部引用進來的,而不是在jsp頁面上編寫的,可以在<script type=”text/javascript” src=”XXX.js” charset=”###″>
中設定charset="###"與你的jsp網頁編碼一致就可以了;如果你的js是在jsp頁面上直接編寫的,基本排除這種型別的錯誤,請往下看。

            2在JAVASCRIPT中,字串前後標記(如單引號或雙引號)不匹配或者巢狀錯誤
              現象:          

              這種最常見,也最容易發現錯誤。字串中單引號( ' )或雙引號( " )前後不配對,或者在document.write()時,沒有正確輸出單引號( ' )或雙引號( " ),還有就是在單雙引號巢狀時出現錯誤。

             解決:

             讓前後引號正確配對;         

             共有兩層巢狀時,雙引號內巢狀單引號是正確的,單引號內巢狀雙引號也是正確的。

             共有三層巢狀時,最裡面一層引號不能和最外面一層相同,這樣是錯誤的,可以在最裡面一層引號前加上轉義字元“\”。

             3.傳遞的引數變數內或者jsp指令碼變數中包含HTML標記語言、包含換行符或包含引號

             現象:
              這種情況是最難發現的,容易忽略了變數內部文字原因產生的,將字串以引數形式傳遞給一個函式或者href、action時,該字串裡包含換行符、引號或HTML標記,造成了此錯誤。如:a.測試時使用單行資料是正常的,未出現這個錯誤;使用多行資料並使用回車鍵換行,就出現了此錯誤,因為裡面包含換行符。b.mArray[<%=n_id%>]="<%=loopnum%><><%=n_topic%><><%=state%><><%=n_sendtime%><><%=n_content%>";看似無誤,但是<%=n_topic%>、<%=n_content%>中包含了多個單雙引號,就出現了此錯誤。

             解決:
             對於這種情況,我的解決方法有兩個,一個是將字串變數進行替換操作,將雙引號替換成單引號,單引號替換成“\"”,不過這樣在傳遞後讀取時還得替換成原文;第二種方法是不直接將資料以引數形式傳遞,而是先將其賦值給一個隱藏文字內,函式裡只需讀取文字中的內容即可。

            當有多行的字元竄時,分開處理下即可,例如:


response.write "<center><table border='1'><tr><td><center><font size='2'><b>"新&_
      "</b></font></center></td><td>"&_
      "<center><font size='2'><b>標題</b></font></center></td><td><center><font size='2'>"&_
      "<b>作者</b></font></center></td><td><center><font size='2'><b>時間"&_
      "</b></font></center></td><td><center>"&_
      "<font size='2'><b>點選</b></font></center></td><td><center><font size='2'><b><大小></b>"&_
      "</font></center></td></tr>"