HTML을위한 이스케이프 텍스트


136

C #에서 HTML 사용을 위해 텍스트를 이스케이프 처리하려면 어떻게합니까? 나하고 싶어

sample="<span>blah<span>"

하고있다

<span>blah<span>

html의 태그 부분에만 blah 대신 일반 텍스트로 표시 :(. ASP가 아닌 C # 사용

c#  html  escaping 

답변:


185
using System.Web;

var encoded = HttpUtility.HtmlEncode(unencoded);

3
유니 코드 문자를 비 유니 코드로 인코딩하려면 다음을 확인하십시오. stackoverflow.com/questions/82008/…
Gyuri

4
나쁜 길을 찾고 싶지 않은 것 : 위의 방법 자체는 제어 문자를 이스케이프하지 않습니다. 여기 허용 대답을 참조하십시오 stackoverflow.com/a/4501246/1543677 모두를 사용합니다.
pkExec 2009

HttpUtility는 더 이상 존재하지 않습니다 (Win 스토어 앱)
Tertium

82

또한 System.Web어셈블리 를 사용하지 않으려는 경우이를 사용할 수 있습니다 .

var encoded = System.Security.SecurityElement.Escape(unencoded)

이 문서 의 차이 System.Security.SecurityElement.Escape()System.Web.HttpUtility.HtmlEncode()전자도 아포스트로피 인코딩한다는 것입니다 (')문자.


7
말할 것도없이 정확히 HTML이 아닌 XMLSecurityElement.Escape()피할 수는 없습니다.
Victor Sergienko 2016 년

System.Security.SecurityElement가 Windows 스토어 앱에 존재하지 않음
Tertium

47

당신이 나보다 .NET 4를 사용하고 참조 할 수없는 경우 System.Web, 당신은 사용할 수 있습니다 WebUtility.HtmlEncode에서System

var encoded = WebUtility.HtmlEncode(unencoded);

이것은 동일한 효과를 HttpUtility.HtmlEncode가지며보다 바람직합니다 System.Security.SecurityElement.Escape.


SecurityElement.Escape보다 선호해야하는 이유는 무엇입니까? 후자에 취약점이 있습니까, 아니면 전자가 더 능력이 있습니까?
트래비스

7
@Travis 취약점은 없습니다 SecurityElement.Escape. XML 에서만 HtmlEncode작동하고 HTML에서 작동하고 XML 및 HTML 인코딩의 요구 사항이 약간 다릅니다 (자세한 내용은 이 답변 참조). 따라서 예를 들어 SecurityElement.Escape는 사용할 수 &apos;있지만 HtmlEncode그렇지는 않습니다.
Alex

1
@Travis 더 나은 "변명"은 System.Net을 Portable Class Libraries에서 사용할 수 있으며 다른 두 가지 옵션은 오늘 아침에 보이지 않는 것 같습니다. ; ^)
ruffin


6

.NET 4.0 이상 :

using System.Web.Security.AntiXss;
//...
var encoded = AntiXssEncoder.HtmlEncode("input", useNamedEntities: true);

5

당신은 실제 HTML 태그를 사용할 수 있습니다 <xmp></xmp>출력에 문자열로 XMP 태그 사이에있는 모든 태그를 표시하는 것입니다.

또는 당신은 또한 서버에서 사용할 수있는 Server.UrlEncodeHttpUtility.HtmlEncode.


나는 그 질문을 더 명확하게했다. 사용자가 </ pre> 할 수있는 태그를 HTML의 일부로 사용하고 싶지는 않습니다.

위대한 게시물 감사 사람이 내가 찾고있는 것을 정확하게 고쳤습니다!
Spets

1
<xmp>오래 전에 사용되지 않습니다 : stackoverflow.com/questions/8307846/...의 사용 <pre>대신에
mortb

1

여기서 보지 못했습니다

System.Web.HttpUtility.JavaScriptStringEncode("Hello, this is Satan's Site")

이와 같은 HTML을 다룰 때 유일하게 작동하는 것은 (asp 4.0 이상)이었습니다. 는 &apos;로 렌더링 도착 '실패를 일으키는 HTML로 (htmldecode 사용) :

<a href="article.aspx?id=268" onclick="tabs.open('modules/xxx/id/268', 'It&apos;s Allstars'); return false;">It's Allstars</a>

1

HtmlEncode에 의해 제거되지 않은 특수 인용 부호 문자가 있으며”및“와 같이 Edge 또는 IE에 올바르게 표시되지 않습니다. 이러한 문자를 아래 기능과 같은 것으로 대체 할 수 있습니다.

private string RemoveJunkChars(string input)
{
    return HttpUtility.HtmlEncode(input.Replace("”", "\"").Replace("“", "\""));
}

잘못된 인코딩을 사용하여 콘텐츠를 제공하고있을 것입니다. IE와 Edge는 이러한 문자를 표시하는 데 아무런 문제가 없습니다.
Bouke

0

향후 Razor 페이지에서이를 수행하는 간단한 방법을 찾고있는 사용자는 다음을 사용하십시오.

.cshtml에서 :

@Html.Raw(Html.Encode("<span>blah<span>"))

.cshtml.cs에서 :

string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.