#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 или что-то в этом роде.
Может быть, вы могли бы поменять местами держатель (как указано выше, а затем поменять его местами?)