2013-05-31 4 views
-1

Это моя проблема.Как вернуть строку C# без r n?

Пользователь может вводить текст в текстовую область в браузере. Затем он отправляется по электронной почте пользователям. Что я хочу знать, так это то, как я могу обращаться с возвратом каретки? Если я ввожу \ r \ n для возврата каретки, в нем есть фактическое \ r \ n письмо (которое представляет собой текстовое сообщение электронной почты).

Другими словами:

В конце SQL сервера

Case 1: , если я это сделать до того, как электронная почта отправляется (обратите внимание на разрыв строки после строки 1)

update emails 
set 
body='line 1 
line 2' 
where 
id=100 

e-mail корректно

Случай 2:

update emails 
set 
body='line 1'+char(13) + char(10) +'line 2' 
where 
id=100 

Это сообщение также выходит правильно

Случай 3: Однако, если я делаю это

update emails 
set 
body='line 1 \r\n line 2', 
where 
id=100 

электронная почта будет иметь фактический текст \ г \ n в нем.

Как смоделировать случай 1/2 через C#?

+7

Почему в мире вы бы использовали UrlDecode? Вы расшифровываете URL-адрес? – RobIII

+1

Chr (10) + Chr (13) –

+0

Вы смутили меня, когда вы сказали «заменить \ r \ n на ввод». Когда вы нажимаете enter, генерируется \ r \ n. –

ответ

2

Используйте любой метод замены строки C#, чтобы заменить "\\r\\n" на "\r\n", и это должно исправить.

7

SQL литералов (по крайней мере те, в SQL Server) не поддержки таких управляющих последовательностей (хотя вы можете просто нажать кнопку ввода в строке буквального, так что она охватывает несколько строк). См. this answer для некоторых альтернатив при записи его как Требование к SQL-строке.

Если запуск SQL программно из C#, используйте parameters, который будет обрабатывать это просто отлично:

sqlCommand.CommandText = "update emails set [email protected] where [email protected]" 
sqlCommand.Parameters.AddWithValue("@body", "line 1 \r\n line2"); 

Обратите внимание, что обращение с строкового литерала (и преобразование побеге \r и \n характера последовательности) происходит в C# и значение (с CR и LF символов) передается SQL.

Если вышеуказанное не решило проблему, продолжайте читать.


4.10.13 The textarea element:

По историческим причинам, значение элемента нормализуется тремя различными способами для трех различных целей. Необработанным значением является значение, поскольку оно было первоначально установлено. Это не нормируется. Значение API - это значение, используемое в атрибуте IDL значения. Он нормализуется, так что разрывы строк используют символы «LF» (U + 000A). Наконец, есть значение представления формы. [При подаче формы текстовое поле] нормализуется так, что разрывы строк используют пары символов U + 000D CARRIAGE RETURN U + 000A LINE FEED (CRLF), и, кроме того, при необходимости с учетом атрибута обертывания элемента добавляются дополнительные разрывы строк обведите текст по заданной ширине.

Обратите внимание, что CR и LF представляют символы и не последовательность двух символов из \ с последующим либо на r или n символов - эта форма часто встречается в строковых литералов. Если он появляется как таковой, то что-то делает неправильное преобразование и ставит (или , оставляя) \. Или, возможно, есть какие-то ошибочные «лишние косые черты»?

Как указывалось, хотя URL-декодирование, скорее всего, неверно, оно не будет непосредственно выполнять это преобразование. Однако, если преобразование произошло ранее, прежде чем «URL-код», то он (правильно) будет декодировать (неправильные) значения.

В любом случае это ошибка. Итак, узнайте где вводится неверное преобразование данных и исправляется (приложите отладчик и/или отслеживайте сетевой трафик для подсказок) - требуемая информация, чтобы изолировать, где просто нет в сообщении.

+0

+1 очень хороший ответ –

Смежные вопросы