2010-01-20 2 views
1

У меня очень странная проблема в том, как строки хранятся в моей базе данных, и в результате я получаю эти ошибки «unterminated string literal» в Javascript.String Encoding Issue

Вот краткий обзор того, что я делаю:

Платформа: C#/ASP.NET MVC 1.0, SQL Server 2005, SparkViewEngine, YUI 2

На мой взгляд, я сериализовать объект в JSON структуры данных с использованием Json.NET от NewtonSoft.

<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 «„Продолжительность“: 6,0»

Compile Анализ & Рекомендации колода

UPDATE После разговора с пользователем, я обнаружил, что они использовали тыс e копирование и вставка из текстового документа в 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

+0

В этом случае мы взяли символы Unicode как Ascii, а затем отобразили полученные 8-битные символы в соответствующие 7-битные печатные символы ascii. – Dave

+0

Чтобы быть более точным, пользователь скопировал текст из документа Word в форму.Я не уверен, какие символы были вставлены, но они не привели к тому, что строка не завершилась правильно; это решение, о котором вы говорили, для таких случаев? Еще раз спасибо! – Abe