Sql server 字符串编码问题
我在数据库中存储字符串的方式上遇到了一个非常奇怪的问题,因此,我在Javascript中遇到了这些“未终止的字符串文字”错误 以下是我所做工作的概述: 平台:C#/ASP.NET MVC 1.0、SQL Server 2005、SparkViewEngine、YUI 2 在我看来,我使用NewtonSoft中的JSON.NET将对象序列化为JSON数据结构Sql server 字符串编码问题,sql-server,asp.net-mvc,spark-view-engine,Sql Server,Asp.net Mvc,Spark View Engine,我在数据库中存储字符串的方式上遇到了一个非常奇怪的问题,因此,我在Javascript中遇到了这些“未终止的字符串文字”错误 以下是我所做工作的概述: 平台:C#/ASP.NET MVC 1.0、SQL Server 2005、SparkViewEngine、YUI 2 在我看来,我使用NewtonSoft中的JSON.NET将对象序列化为JSON数据结构 <script type="text/javascript"> // <![CDATA[ var dat
<script type="text/javascript">
// <![CDATA[
var data = YAHOO.lang.JSON.parse("${Newtonsoft.Json.JsonConvert.Serialize(Model)}");
....
</script>
//
正常情况下,这是可行的,但我注意到我从数据库中提取的一个字段包含以下数据,这导致字符串的格式不正确
数据库字段是一个NVARCHAR(2000)
对于某些条目,当我从数据库复制并粘贴到记事本时,字符串中会出现这些奇怪的字符
编译分析和建议?甲板
在Firebug中,它显示为一组换行符:
分析与建议甲板,“开始日期”为“1/19/10”,“完成日期”为“1/26/10”,“持续时间”为6.0
编译
分析
&
建议
甲板
更新
在与用户交谈之后,我发现他们正在使用从word文档复制和粘贴到HTML表单的方法
表单本身使用YUI连接管理器进行异步POST调用(AJAX)以保存表单值。
数据库保存表单字段值以及与其关联的任何编码
Word中似乎有可打印的字符,但ASCII中没有。有没有办法检测并正确编码?这似乎是因为您没有正确处理引号字符。你有好几条路要走。我为我们的网站评论的方式是确保所有的引号都是编码的,包括单引号和双引号,这样您的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)), _
"-", "-"), ":", ":"), "|", "|"), _
"`", "`"), "(", "("), ")", ")"), _
"%", "%"), "^", "^"), """", """), _
"/", "/"), "*", "*"), "'", "'")
End Function
函数安全注释(ByVal strInput)
'使任何注释代码无害,并使它们在电子邮件或网页中具有HTML可读性
'Try:SafeComment(“`~!@$%^&*()\+=-{}][\\'”;:?/,”)
SafeComment=“”
如果Len(strInput)=0,则退出函数
SafeComment=替换(替换(_
替换_
替换_
替换_
HtmlEncode(Trim(strInput))_
"-", "-"), ":", ":"), "|", "|"), _
"`", "`"), "(", "("), ")", ")"), _
"%", "%"), "^", "^"), """", """), _
"/", "/"), "*", "*"), "'", "'")
端函数
这并不漂亮,但它确实起到了作用。谢谢。我认为问题在于用户复制并粘贴了一个不可打印ASCII字符的字符。在这种情况下,我们将unicode字符作为ASCII字符,然后将生成的8位字符映射到相应的7位可打印ASCII字符。更准确地说,用户从word文档粘贴到表单上。我不确定粘贴了哪些字符,但它们导致字符串未正确终止;您提到的解决方案适用于此类情况吗?再次感谢!对于这种情况,我们使用了一个函数,将x20到x7e范围内的所有字符映射到x20到x7e范围内。这个函数更糟糕。我创建了一个Characterizer值数组。代码对该字符执行ASC(),并转到数组中的该位置以创建输出字符。我们必须这样做,因为MS Dynamics数据映射将不接受该范围之外的任何字符。任何未映射的字符都将被忽略。