C #에서 HTML 문자를 어떻게 디코딩 할 수 있습니까?


397

HTML 문자 엔터티로 인코딩 된 전자 메일 주소가 있습니다. .NET에 일반 문자열로 변환 할 수있는 것이 있습니까?

답변:


618

당신이 사용할 수있는 HttpUtility.HtmlDecode

.NET 4.0 이상을 사용 WebUtility.HtmlDecode하는 경우 System.Net네임 스페이스 에서 사용할 수 있으므로 추가 어셈블리 참조가 필요없는을 사용할 수도 있습니다 .


1
System.Web에 있어야하지만 그렇지 않습니다. 나는 1 년 이상 C #을 만지지 않았으며, 조금 더 좌절하면 수동으로 변환 할 것입니다.
Vasil

1
그것은 System.Web의 .NET 2.0 버전의
마크시다

1
System.Web을 사용하고 있습니다. 내 맥락에서 그 네임 스페이스에는 AspPermission 클래스가 있습니다.
Vasil

17
프로젝트 속성에서 System.Web.Dll에 대한 참조를 추가하십시오. 표시되는 클래스는 기본적으로 참조되는 System.dll에 있습니다.
OwenP

11
쿼리 문자열을 해독하려는 경우 다음을 사용해야합니다.HttpUtility.UrlDecode
PeterX

189

.Net 4.0에서 :

System.Net.WebUtility.HtmlDecode()

C # 프로젝트를 위해 어셈블리를 포함 할 필요가 없습니다.


6
HttpUtility가 "& apos;"를 해독하지 않기 때문에 더 나은 솔루션입니다 symbol .. 이유를 모르겠습니다 ..
RredCat

이것은 Universal Windows 플랫폼을 개발할 때 필요합니다.
matthewsheets 2016 년

이로 인해 .Net 웹 페이지에서 XSS가 발생합니까?
Senura Dissanayake

43

@CQ가 말했듯이 HttpUtility.HtmlDecode 를 사용해야 하지만 기본적으로 ASP 이외의 .NET 프로젝트에서는 사용할 수 없습니다.

비 ASP .NET 응용 프로그램의 경우에 참조를 추가해야합니다 System.Web.dll. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 "참조 추가"를 선택한 다음 목록을 찾아보십시오 System.Web.dll.

참조가 추가되었으므로 완전한 이름을 사용하여 메소드에 액세스 System.Web.HttpUtility.HtmlDecode하거나 using명령문을 삽입하여 System.Web작업을보다 쉽게 ​​수행 할 수 있어야합니다 .



7

Server.HtmlDecodeHTML 엔터티를 디코딩하는 데 사용 합니다. HTML 을 이스케이프 하려면 (예 : <>문자를 사용자에게 표시하려면 )을 사용하십시오 Server.HtmlEncode.


4
서버 컨텍스트가 없을 수도 있습니다 (예 : 테스트 사례 등을 실행하는 경우) :이 트랩에 오기 전에 :)
Rob Cooper

7

HTML을 디코딩하려면 아래 코드를 살펴보십시오.

string s = "Svendborg V&#230;rft A/S";
string a = HttpUtility.HtmlDecode(s);
Response.Write(a);

출력은 같다

 Svendborg Værft A/S

2
HtmlDecode가 문자열을 반환하므로 'ToString ()'은 중복됩니다
Justin

6

나처럼 HtmlAgilityPack을 사용하는 경우을 사용해야한다고 언급 할 가치가 있습니다 HtmlAgilityPack.HtmlEntity.DeEntitize(). a를 가져와 a string를 반환합니다 string.


1

문자열을 매개 변수로 승인하고 디코딩 된 HTML 문자열을 리턴하는 유틸리티 클래스에 메소드를 정적으로 작성하십시오.

using System.Web.HttpUtility수업에 포함

public static string HtmlEncode(string text)
    {
        if(text.length > 0){

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

.net 4.0의 경우

System.net.dll프로젝트에 대한 참조를 추가 한 using System.Net;후 다음 확장을 사용하십시오.

// Html encode/decode
    public static string HtmDecode(this string htmlEncodedString)
    {
        if(htmlEncodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlDecode(htmlEncodedString);
        }
        else
        {
            return htmlEncodedString;
        }
    }

    public static string HtmEncode(this string htmlDecodedString)
    {
        if(htmlDecodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlEncode(htmlDecodedString);
        }
        else
        {
            return htmlDecodedString;
        }
    }

0

& # x20;이 포함 된 문자열의 경우 문자열을 이중 디코딩해야했습니다. 첫 번째 디코드는이를 두 번째 패스로 바꾸어 예상 문자로 올바르게 디코드합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.