2010-01-20 183 views
1

我在字符串存儲在數據庫中的方式有​​一個非常奇怪的問題,因此,我得到這些「未終止的字符串文字」錯誤在Javascript中。字符串編碼問題

這裏是我做的一個概述:

平臺:C#/ ASP.NET MVC 1.0,SQL Server 2005中,SparkViewEngine,YUI 2

在我看來,我將對象序列化到JSON數據結構使用來自NewtonSoft的Json.NET。

<script type="text/javascript"> 
    // <![CDATA[ 
    var data = YAHOO.lang.JSON.parse("${Newtonsoft.Json.JsonConvert.Serialize(Model)}"); 
    .... 
</script> 

通常情況下,這個工作,但我注意到,我從數據庫中提取的一個字段包含以下數據,這將導致該字符串不能正確形成。

數據庫字段是NVARCHAR(2000)

對於某些條目,當我從數據庫複製並粘貼到記事本時,我在字符串中會出現這些奇怪的字符。

編譯?分析? &?推薦?甲板

在Firebug中,它顯示爲一串換行符:

分析&建議甲板 「 」開始日期「: 」10年1月19日「, 」FinishDate「:」 2010/1/26 「 」持續時間「:6.0,」

編譯分析&建議甲板

UPDATE 聊到用戶後,我發現他們使用日從Word文檔複製並粘貼到HTML表單上。

表單本身使用YUI連接管理器進行異步POST調用(AJAX)以保存表單值。 數據庫保存了表單字段值以及與其關聯的任何編碼。

看起來好像Word中的字符是可打印的,但不是ASCII。有什麼辦法可以檢測到這個並且正確編碼嗎?

回答

2

這似乎是您沒有正確處理引號字符的情況。你有幾種方法可以去。我爲我們的網站評論的方式是確保所有引號都是單編碼和雙編碼,以便您的SQL,ASPX & Javascript不會打嗝。 我們的方法是針對客戶評論字段,所以我們對轉換過度了。

Function SafeComment(ByVal strInput) 
' Renders Any Comment Codes Harmless And Leaves Them HTML readable In An eMail Or Web Page 
' Try: SafeComment("`[email protected]#$%^&*()_+=-{}][|\'"";:<>?/.,") 
    SafeComment = "" 
    If Len(strInput) = 0 Then Exit Function 
    SafeComment = Replace(Replace(Replace(_ 
        Replace(Replace(Replace(_ 
        Replace(Replace(Replace(_ 
        Replace(Replace(Replace(_ 
         Server.HtmlEncode(Trim(strInput)), _ 
        "-", "&#45;"), ":", "&#58;"), "|", "&#124;"), _ 
        "`", "&#96;"), "(", "&#40;"), ")", "&#41;"), _ 
        "%", "&#37;"), "^", "&#94;"), """", "&#34;"), _ 
        "/", "&#47;"), "*", "&#42;"), "'", "&#39;") 
End Function 

這不是很漂亮,但它的工作。

+0

謝謝。我認爲問題在於用戶複製並粘貼了不可打印的ASCII字符的字符。 – Abe 2010-01-20 22:33:21

+0

對於這種情況,我們將Unicode字符作爲Ascii,然後將得到的8位字符映射到適當的7位可打印ASCII字符。 – Dave 2010-01-22 17:27:18

+0

更確切地說,用戶將word文檔中的文本複製到表單上。我不確定哪些字符被粘貼,但他們導致字符串不能正確終止;你提到的解決方案是否適用於這種情況?再次感謝! – Abe 2010-01-25 05:01:36