У меня есть элемент управления textarea, который принимает ввод. Я пытаюсь позже сделать этот текст для представления, просто используя:
@ Model.CommentText
Это правильно кодирует любые значения. Однако я хочу заменить символы разрыва строки на <br />
и не могу найти способ убедиться, что новые теги br не закодированы. Я пытался использовать HtmlString, но еще не повезло.
\n
в базе данных, и вы хотите преобразовать в<br />
?Ответы:
Используйте свойство пробела CSS вместо того, чтобы открывать себя уязвимостям XSS!
источник
pre-line
(я знал только оnowrap
иpre
).white-space: pre-wrap;
лучше, так какpre-line
будет портить ваш текст, группируя пробелы в один пробел.Попробуйте следующее:
Обновить:
Согласно
marcind's
комментариям по этому связанному с этим вопрос , команда ASP.NET MVC рассчитывает реализовать нечто подобное<%:
и<%=
для просмотра двигателя Razor.Обновление 2:
Мы можем превратить любой вопрос о кодировке HTML в дискуссию о вредных входах пользователя, но этого уже достаточно.
В любом случае, позаботьтесь о возможном вредном вводе пользователя.
Обновление 3 (Asp.Net MVC 3):
источник
<script>
.\n
вместо этого\r\n
Разделение на новые строки (независимость от среды) и печать регулярно - не нужно беспокоиться о кодировке или xss:
(удалять пустые записи необязательно)
источник
Третье решение Омара в качестве помощника HTML будет:
источник
Применяя принцип DRY к решению Омара, вот расширение HTML Helper:
Использование (с улучшенным регулярным выражением):
Это также имеет дополнительное преимущество, заключающееся в том, что разработчик Razor View будет нести большую ответственность за обеспечение безопасности от уязвимостей XSS.
Меня беспокоит решение Джейкоба, что рендеринг разрывов строк с помощью CSS нарушает семантику HTML .
источник
Мне нужно было разбить текст на абзацы (теги «p»), поэтому я создал простого помощника, используя некоторые рекомендации из предыдущих ответов (спасибо, ребята).
Использование:
источник
Я предпочитаю этот метод, поскольку он не требует ручной разметки. Я использую это, потому что я рендерим Razor Pages в строки и отправляю их по электронной почте, что является средой, в которой стиль пробелов не всегда работает.
источник