Ответ 1
Используйте HttpUtility.HtmlEncode, затем замените.
@Html.Raw(HttpUtility.HtmlEncode(Message).Replace("\n", "<br/>"))
Я беру ввод пользователя в текстовую область, сохраняю ее и в конечном итоге показываю ее пользователю.
В моем представлении (Razor) я хочу сделать что-то вроде этого...
@Message.Replace("\n", "</br>")
Это не работает, потому что Razor Html кодирует по умолчанию. Это здорово, но я хочу, чтобы мои разрывы.
Если я это сделаю, я открою проблемы с XSS.
@Html.Raw(Message.Replace("\n", "</br>"))
Какой правильный способ справиться с этой ситуацией?
Используйте HttpUtility.HtmlEncode, затем замените.
@Html.Raw(HttpUtility.HtmlEncode(Message).Replace("\n", "<br/>"))
Если вы обнаружите, что используете это более одного раза, может быть полезно обернуть его в пользовательский HtmlHelper следующим образом:
namespace Helpers
{
public static class ExtensionMethods
{
public static IHtmlString PreserveNewLines(this HtmlHelper htmlHelper, string message)
{
return message == null ? null : htmlHelper.Raw(htmlHelper.Encode(message).Replace("\n", "<br/>"));
}
}
}
Затем вы сможете использовать свой собственный HtmlHelper следующим образом:
@Html.PreserveNewLines(Message)
Имейте в виду, что вам нужно добавить использование в пространство имен Helpers для доступности HtmlHelper.
Вы можете закодировать свое сообщение, а затем отобразить его в raw. Что-то вроде:
@Html.Raw(Server.HtmlEncode(Message).Replace("\n", "<br/>"))
Для тех, кто использует AntiXssEncoder.HtmlEncode
Как AntiXssEncoder.HtmlEncode кодирует символ /r/n для
, поэтому утверждение должно быть
_mDraftMsgModel.wnItem.Description = AntiXssEncoder.HtmlEncode(draftModel.txtMsgContent, false).Replace(" ", "<br/>");