2010-08-20 2 views
1

나는 긴 문자열의 DAT는 모든 태그 를 인코딩합니다 대해 HTMLEncode 적용 html 태그 를 포함 할 수있다하지만 난이 방법이 얼마나 그대로 일부 특정 태그를 마칠 것이 가능대해 HTMLEncode는()는

답변

1

전체 문자열을 인코딩 한 다음 인코딩하지 않으려는 특정 태그를 디코딩합니다.

속성없이 간단한 태그 만 허용하는 경우 (예 : <b><u>) 간단한 Replace을 사용하여 디코딩 할 수 있습니다.

1

입력 HTML이 올바른 형식이라고 가정하면 정규 표현식을 사용할 수 있습니다. 이것은 중첩 된 태그에서 일치하는 쌍을 찾으려고하지 않고 HTML 주석 내부에서 발생하는 태그에 대해 걱정하지 않기 때문에 가능합니다. 그렇지 않으면 정규 표현식이이 작업의 나쁜 후보가됩니다.

var allowedTags = new[] { "a", "abbr", "br", /* etc. */ }; 

var output = Regex.Replace(input, 
    // Matches a single start or end tag 
    @"</?(\w+)[^>]*>", 
    // If the tag is one of the allowed tags... 
    me => allowedTags.Contains(me.Groups[1].Value) 
     // ... keep it unchanged 
     ? me.Value 
     // otherwise, HTML-encode it 
     : HttpServerUtility.HtmlEncode(me.Value), 
    RegexOptions.Singleline); 

사용자가 보낸 HTML 인 경우 올바른 형식이라고 가정 할 수 없습니다. 그러한 경우에는보다 견고한 솔루션을 추천합니다. Html Agility Pack을 사용하십시오.