Entfernen von HTML-Tags aus einer Zeichenfolge in C#

Saad Aslam 12 Oktober 2023
  1. Verwenden Sie Regex, um HTML-Tags aus einem String in C# zu entfernen
  2. Verwenden Sie das HTML Agility Pack, um HTML-Tags aus einer Zeichenfolge in C# zu entfernen
Entfernen von HTML-Tags aus einer Zeichenfolge in C#

In diesem Beitrag zeigen wir, wie man alle HTML-Tags aus einer Zeichenfolge entfernt, ohne zu wissen, welche Tags darin enthalten sind.

Es gibt viele Möglichkeiten, diese Aufgabe zu erfüllen, aber keine garantiert Ihnen, dass Sie alle Tags entfernen. Wir werden uns einige seiner Methoden ansehen.

Verwenden Sie Regex, um HTML-Tags aus einem String in C# zu entfernen

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

Diese Funktion übergibt einen String-Parameter, und wir verwenden die Funktion Replace() der regex, um die Tags zu entfernen, da die Signatur der Tags in der Funktionseingabe angegeben ist.

Es funktioniert nicht in allen Fällen, aber die meisten haben gut funktioniert. Sie müssen Ihren Algorithmus zum Entfernen aller Tags aus einer Zeichenfolgeneingabe schreiben.

Verwenden Sie das HTML Agility Pack, um HTML-Tags aus einer Zeichenfolge in C# zu entfernen

Eine andere Lösung ist die Verwendung des 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;
}

Dies funktioniert gut, mit Ausnahme der Knoten strong, em, u und Rohtext. Diese Funktion nimmt einen String als Parameter in der Variablen d.

Die Zeile if(string.IsNullOrEmpty(d)) prüft, ob die Zeichenfolge bereits leer ist, und gibt dann die leere Zeichenfolge zurück.

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

Diese Anweisungen erstellen ein neues HTML-Dokument und laden die Daten in das Dokument. Es ist bereits eine HTML-Tag-Zeichenfolge und folgt dem HTML-Muster.

Die var accTags = new String[] { "strong", "em", "u"}; line gibt an, welche Tags erlaubt sind. Sie können die Tags gemäß Ihren Anforderungen ändern, hinzufügen oder entfernen.

Dann verwendet es in der while-Schleife die Warteschlange, um alle Dokumentknoten hinzuzufügen, entfernt jeden Knoten aus der Warteschlange und entfernt das HTML-Tag.

Der Prozess wird fortgesetzt, bis alle Daten bereinigt sind, und gibt dann den inneren HTML-Code des HTML-Dokuments zurück, der bereits ein bereinigter Text ist.

Wie bereits erwähnt, gibt es keine feste Regel oder Methode, um diese Aufgabe zu erfüllen. Es gibt mehrere Möglichkeiten, und keine Möglichkeit ist absolut zuverlässig.

Dieser Code wurde für einen niedrigen Datensatz getestet. Wir können den Eingaben des Benutzers niemals vertrauen.

Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Verwandter Artikel - Csharp String