web-dev-qa-db-ja.com

改行表示asp.net mvcかみそり

次のコードを使用して、<textarea> HTML要素に入力された改行をテキスト出力にします。

MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />"))

これを行うより良い方法はありますか?

23
raklos

コードはテキストをHTMLエンコードしないため、XSS攻撃に対して脆弱です。以下をお勧めします。

var result = string.Join(
    "<br/>",
    Model.Post.Description
        .Split(new[] { Environment.NewLine }, StringSplitOptions.None)
        .Select(x => HttpUtility.HtmlEncode(x))
);
return MvcHtmlString.Create(result);

そしてあなたの見解ではあなたは安全にできる:

@Html.SomeHelper()
23
Darin Dimitrov

CSSホワイトスペースプロパティ を使用する、より良い/素晴らしいソリューションがあります。

これを使用すると、 クロスサイトスクリプティング (XSS)の脆弱性を回避できます...

<p style="white-space: pre-line">@Model.Message</p>

ASP.NET MVC Razorエンジンでチャームのように動作します。

69

<pre>タグ内のテキストを出力できるかもしれません。

3
willvv

タグを使用するだけです。 <pre>@Model.Post.Description</pre>

または

@Html.Raw(HttpUtility.HtmlDecode(Model.Post.Description.Replace("\r\n", "<br>")))
1
Abhishek Kanrar

これが私の解決策です。

@MvcHtmlString.Create(Regex.Replace(Html.Encode(Model.Address), Environment.NewLine, "<br />", RegexOptions.Multiline))

そしてもちろん、Regexを機能させるには、次のusingステートメントを追加する必要があります。

@using System.Text.RegularExpressions

それが誰かのために役立つことを願っています。

0
Sikandar Amla

それは私のために働いています。

<p class="message">
@Html.Raw("<p>" + Model.Text + "</p>")
</p>

内部に<br />タグを含む文字列Model.Text。

0