1

我在字符串存储在数据库中的方式上遇到了一个非常奇怪的问题,因此,我在 Javascript 中遇到了这些“未终止的字符串文字”错误。

以下是我正在做的事情的概述:

平台:C#/ASP.NET MVC 1.0、SQL Server 2005、SparkViewEngine、YUI 2

在我看来,我使用 NewtonSoft 的 Json.NET 将对象序列化为 JSON 数据结构。

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

通常,这是可行的,但我注意到我从数据库中提取的字段之一包含以下数据,这导致字符串无法正确形成。

数据库字段是NVARCHAR(2000)

对于某些条目,当我从数据库复制并粘贴到记事本时,我会在字符串中得到这些奇怪的字符。

编译?分析?&?建议?甲板

在 Firebug 中,它显示为一堆换行符:

分析与建议甲板","StartDate":"1/19/10","FinishDate":"1/26/10","Duration":6.0,"

编译分析 推荐甲板

更新 与用户交谈后,我发现他们正在使用从 word 文档复制和粘贴到 HTML 表单。

表单本身使用 YUI 连接管理器进行异步 POST 调用 (AJAX) 以保存表单值。数据库保存了表单字段值以及与之关联的任何编码。

似乎 Word 中有可打印的字符,但不是 ASCII 字符。有没有办法检测到这一点并正确编码?

4

1 回答 1

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("`~!@#$%^&*()_+=-{}][|\'"";:<>?/.,")
    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

它不漂亮,但它可以完成工作。

于 2010-01-20T22:15:19.750 回答