HOWTO · Csharp
C#의 문자열에서 HTML 태그 제거
이 기사에서는 C# 프로그래밍의 문자열에서 모든 HTML 태그를 제거하는 방법을 살펴보겠습니다.
이 페이지의 내용
이 게시물에서는 문자열 안에 어떤 태그가 포함되어 있는지 모른 채 문자열에서 모든 HTML 태그를 제거하는 방법을 보여줍니다.
이 작업을 수행하는 방법에는 여러 가지가 있지만 모든 태그를 제거한다고 보장할 수 있는 방법은 없습니다. 몇 가지 방법을 살펴보겠습니다.
정규식을 사용하여 C#의 문자열에서 HTML 태그 제거
public static string StripHTML(string input) {
return Regex.Replace(input, "<[a-zA-Z/].*?>", String.Empty);
}
이 함수는 문자열 매개변수를 전달하고 태그의 서명이 함수 입력에 제공되므로 regex의 Replace() 함수를 사용하여 태그를 제거합니다.
모든 경우에 작동하지는 않지만 대부분은 잘 작동했습니다. 문자열 입력에서 모든 태그를 제거하는 알고리즘을 작성해야 합니다.
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을 반환합니다.
앞서 말했듯이 이 작업을 수행하기 위한 어렵고 빠른 규칙이나 방법은 없습니다. 여러 가지 방법이 있으며 완전히 신뢰할 수 있는 방법은 없습니다.
이 코드는 낮은 데이터 세트에 대해 테스트되었습니다. 우리는 사용자의 입력을 절대 신뢰할 수 없습니다.