Проблема строкового кодирования - PullRequest
1 голос
/ 21 января 2010

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

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

Платформа: 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 "," Duration ": 6,0,"

Компиляция анализа и рекомендаций колода

UPDATE Поговорив с пользователем, я обнаружил, что они используют копирование и вставку из текстового документа в HTML-форму.

Форма сама использует диспетчер соединений YUI для выполнения асинхронного вызова POST (AJAX) для сохранения значений формы. База данных сохранила значение поля формы вместе с любой кодировкой, связанной с ним.

Кажется, что в Word есть символы, которые можно распечатать, но не в ASCII. Есть ли способ обнаружить это и правильно кодировать?

1 Ответ

2 голосов
/ 21 января 2010

Похоже, вы неправильно обрабатываете символы кавычки. У вас есть несколько способов пойти. Я использую комментарии для нашего веб-сайта, чтобы убедиться, что все кавычки закодированы, как одинарные, так и двойные, чтобы ваш 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

Это не красиво, но это делает работу.

...