2010-01-20 156 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