2011-03-11 5 views
18

다음은 텍스트 출력에 <textarea> HTML 요소에 입력 된 줄 바꿈을 사용하는 것입니다.디스플레이 줄 바꿈 asp.net mvc 면도칼

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

더 좋은 방법이 있나요?

+0

줄 바꿈을 공백으로 대체하면이 도우미가 줄 바꿈을 출력하는 방법을 실제로 볼 수 없습니다. –

+0

@ 대린 - 내 부분에 불량 복사/붙여 넣기가 업데이트되었습니다. – raklos

+0

dup http://stackoverflow.com/questions/5032097/asp-net-mvc-convert-n-new-line-to-html-breaks – BlackTigerX

답변

22

텍스트를 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); 

과 : 나는 다음 당신에게 추천이 당신이 Cross-site scripting을 피하기 사용

: CSS white-space property을 고용하고 더 나은/멋진 해결책이있다

@Html.SomeHelper() 
0

아마도 태그 안에 텍스트를 출력 할 수 있습니다.

54

(XSS) 취약점 ...

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

ork는 ASP.NET MVC 면도기 엔진과 같은 매력을 가지고 있습니다.

+2

사실 이것은 허용 된 대답이어야합니다. op가 더 좋은 방법을 묻기 때문에! – rjso

0

저에게 효과적입니다.

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

문자열 모델. 텍스트는 < br /> 태그 내부에 있습니다.

+1

이것은 XSS 공격에 개방적입니다. ''을'Model.Text'에 넣으면 형편이됩니다. – trailmax

0

여기 내 해결책이 있습니다.

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

물론 물론 Regex가 작동하려면 다음 문장을 사용해야합니다.

@using System.Text.RegularExpressions 

누군가에게 유용 할 것입니다.