HOWTO · Csharp

C#의 문자열에서 HTML 태그 제거

이 기사에서는 C# 프로그래밍의 문자열에서 모든 HTML 태그를 제거하는 방법을 살펴보겠습니다.

이 페이지의 내용

이 게시물에서는 문자열 안에 어떤 태그가 포함되어 있는지 모른 채 문자열에서 모든 HTML 태그를 제거하는 방법을 보여줍니다.

이 작업을 수행하는 방법에는 여러 가지가 있지만 모든 태그를 제거한다고 보장할 수 있는 방법은 없습니다. 몇 가지 방법을 살펴보겠습니다.

정규식을 사용하여 C#의 문자열에서 HTML 태그 제거

public static string StripHTML(string input) {
  return Regex.Replace(input, "<[a-zA-Z/].*?>", String.Empty);
}

이 함수는 문자열 매개변수를 전달하고 태그의 서명이 함수 입력에 제공되므로 regexReplace() 함수를 사용하여 태그를 제거합니다.

모든 경우에 작동하지는 않지만 대부분은 잘 작동했습니다. 문자열 입력에서 모든 태그를 제거하는 알고리즘을 작성해야 합니다.

HTML Agility Pack을 사용하여 C#의 문자열에서 HTML 태그 제거

또 다른 해결책은 HTML Agility Pack을 사용하는 것입니다.

internal static string RmvTags(string d) {
  if (string.IsNullOrEmpty(d))
    return string.Empty;

  var doc = new HtmlDocument();
  doc.LoadHtml(d);

  var accTags = new String[] { "strong", "em", "u" };
  var n = new Queue<HtmlNode>(doc.DocumentNode.SelectNodes("./*|./text()"));
  while (n.Count > 0) {
    var no = nodes.Dequeue();
    var pNo = no.ParentNode;

    if (!accTags.Contains(no.Name) && no.Name != "#text") {
      var cNo = no.SelectNodes("./*|./text()");

      if (cNo != null) {
        foreach (var c in cNo) {
          n.Enqueue(c);
          pNo.InsertBefore(c, no);
        }
      }
      pNo.RemoveChild(no);
    }
  }
  return doc.DocumentNode.InnerHtml;
}

이것은 strong, em, u 및 원시 텍스트 노드를 제외하고는 잘 작동합니다. 이 함수는 d 변수의 매개변수로 문자열을 사용합니다.

if(string.IsNullOrEmpty(d)) 행은 문자열이 이미 비어 있는지 확인한 다음 빈 문자열을 반환합니다.

var doc = new HtmlDocument();
doc.LoadHtml(d);

이 문은 새 HTML 문서를 만들고 데이터를 문서에 로드합니다. 이미 HTML 태그 문자열이며 HTML 패턴을 따릅니다.

var accTags = new String[] { "strong", "em", "u"}; 행은 어떤 태그가 허용되는지 알려줍니다. 요구 사항에 따라 태그를 변경, 추가 또는 제거할 수 있습니다.

그런 다음 while 루프에서 큐를 사용하여 모든 문서 노드를 추가하고 각 노드를 큐에서 빼내고 HTML 태그를 제거합니다.

이 프로세스는 모든 데이터가 삭제될 때까지 계속된 다음 이미 삭제된 텍스트인 HTML 문서의 내부 HTML을 반환합니다.

앞서 말했듯이 이 작업을 수행하기 위한 어렵고 빠른 규칙이나 방법은 없습니다. 여러 가지 방법이 있으며 완전히 신뢰할 수 있는 방법은 없습니다.

이 코드는 낮은 데이터 세트에 대해 테스트되었습니다. 우리는 사용자의 입력을 절대 신뢰할 수 없습니다.