Supprimer les balises HTML d'une chaîne en C#

Saad Aslam 12 octobre 2023
  1. Utiliser Regex pour supprimer les balises HTML d’une chaîne en C#
  2. Utiliser HTML Agility Pack pour supprimer les balises HTML d’une chaîne en C#
Supprimer les balises HTML d'une chaîne en C#

Dans cet article, nous allons montrer comment supprimer toutes les balises HTML d’une chaîne sans savoir quelles balises y sont incluses.

Il existe de nombreuses façons d’accomplir cette tâche, mais aucune ne vous garantira de supprimer toutes les balises. Nous verrons quelques-unes de ses méthodes.

Utiliser Regex pour supprimer les balises HTML d’une chaîne en C#

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

Cette fonction passe un paramètre de chaîne, et nous utilisons la fonction Replace() de la regex pour supprimer les balises car la signature des balises est donnée dans l’entrée de la fonction.

Cela ne fonctionne pas pour tous les cas, mais la plupart ont bien fonctionné. Vous devrez écrire votre algorithme pour supprimer toutes les balises d’une entrée de chaîne.

Utiliser HTML Agility Pack pour supprimer les balises HTML d’une chaîne en C#

Une autre solution consiste à utiliser le 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;
}

Cela fonctionnera bien sauf pour les nœuds strong, em, u et les nœuds de texte brut. Cette fonction prend une chaîne en paramètre dans la variable d.

La ligne if(string.IsNullOrEmpty(d)) vérifie si la chaîne est déjà vide puis renvoie la chaîne vide.

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

Ces instructions créent un nouveau document HTML et chargent les données dans le document. Il s’agit déjà d’une chaîne de balise HTML et suivra le modèle HTML.

La var accTags = new String[] { "strong", "em", "u"}; La ligne indique quelles balises doivent être autorisées. Vous pouvez modifier, ajouter ou supprimer les balises selon vos besoins.

Ensuite, dans la boucle while, il utilise la file d’attente pour ajouter tous les nœuds du document, retire chaque nœud de la file d’attente et supprime la balise HTML.

Le processus se poursuit jusqu’à ce que toutes les données soient nettoyées, puis il renvoie le code HTML interne du document HTML, qui est déjà un texte nettoyé.

Comme dit précédemment, il n’y a pas de règle ou de méthode absolue pour accomplir cette tâche. Il existe plusieurs façons, et aucune n’est complètement fiable.

Ce code a été testé pour un ensemble de données faible. Nous ne pouvons jamais faire confiance à l’entrée de l’utilisateur.

Auteur: 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

Article connexe - Csharp String