Почему C#.net удаление моих символов новой строки при замене, и как я могу это остановить?

#c# #.net #regex #visual-studio #replace

#c# #.net #регулярное выражение #visual-studio #заменить

Вопрос:

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

Я разрешаю использовать токены в качестве заполнителей для информации, относящейся к этому сообщению.

Если я вообще не касаюсь заполнителей, электронное письмо отправляется просто отлично с разрывами строк точно так, как они есть в текстовом поле (электронное письмо отправляется в виде обычного текста).

Однако, когда я начинаю использовать функцию replace, символы новой строки начинают исчезать, и все строки объединяются.

Например.

 Body.Replace("%procedure%", CurrentOrder.Description);
  

Заменит текст %procedure%, но также удалит новую строку в конце строки. Даже если новая строка не находится непосредственно после заменяемого текста.

Есть идеи?

Редактировать:

На данный момент я просто заменяю » n» на « <br /> » и отправляю электронное письмо в формате HTML. Я бы предпочел сохранить его в виде обычного текста, поскольку у меня вообще нет контроля над получателями.

РЕДАКТИРОВАНИЕ 2: похоже, это проблема с самим Outlook, а не с электронной почтой. Я только что просмотрел точно такое же электронное письмо в gmail, и формат был правильным.

Комментарии:

1. Удаляются ли новые строки в строке в коде или в результирующем электронном письме в Outlook?

2. Вы тестировали это в разных браузерах? Браузеры IIRC отличаются тем, как они добавляют разрывы строк в текстовые области, возможно, когда. NET манипулирует строками, он «исправляет» то, что он считает «сломанными» разрывами строк? Понимание .NET разрыва строки доступно через Environment.NewLine . Только что видел, что ваши изменения в браузере более актуальны, если вы заменяете n .

3. @GregB Я только что запустил регулярное выражение, чтобы увидеть количество совпадений, и похоже, что число остается неизменным.

Ответ №1:

Outlook удаляет новые строки, если строка не заканчивается двумя пробелами.

Если вы тестируете электронные письма для учетной записи, использующей Outlook, попробуйте добавить два пробела перед новыми строками и посмотреть, исправит ли это.

Комментарии:

1. Я только что обнаружил, что это проблема Outlook… спасибо за вашу помощь. Я изучу это.

2. Это сделало это Body.Replace(Environment.NewLine, Environment.NewLine " ");

3. После дальнейшего изучения вы можете просто добавить вкладку перед разрывом строки, и Outlook не удалит ее. Это также сохраняет форматирование верным, а не добавляет 2 дополнительных пробела в начале каждой новой строки.

4. Вы должны заменить на " " Environment.NewLine so, чтобы строка заканчивалась двумя пробелами, а не следующей строкой, начинающейся с двух пробелов.

Ответ №2:

Если это для HTML, я бы в первую очередь заменил новые строки тегами BR:

 String str = str.Replace(Environment.NewLine, "<br/>");
  

либо это, либо вместо использования многострочного текстового поля используйте HTML-редактор jQuery или AJAX или что-то в этом роде.


Может быть, вы могли бы поменять местами держатель (как указано выше, а затем поменять его местами?)