Eliminar etiquetas HTML de una cadena en C#

Saad Aslam 12 octubre 2023
  1. Use Regex para eliminar etiquetas HTML de una cadena en C#
  2. Use HTML Agility Pack para eliminar etiquetas HTML de una cadena en C#
Eliminar etiquetas HTML de una cadena en C#

En esta publicación, demostraremos cómo eliminar todas las etiquetas HTML de una cadena sin saber qué etiquetas se incluyen dentro de ella.

Hay muchas formas de lograr esta tarea, pero ninguna le garantizará que elimine todas las etiquetas. Veremos algunos de sus métodos.

Use Regex para eliminar etiquetas HTML de una cadena en C#

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

Esta función pasa un parámetro de cadena, y usamos la función Replace() de la regex para eliminar las etiquetas, ya que la firma de las etiquetas se proporciona en la entrada de la función.

No funciona para todos los casos, pero la mayoría funcionó bien. Deberá escribir su algoritmo para eliminar todas las etiquetas de una entrada de cadena.

Use HTML Agility Pack para eliminar etiquetas HTML de una cadena en C#

Otra solución es usar el 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;
}

Esto funcionará bien, excepto para los nodos strong, em, u y raw text. Esta función toma como parámetro una cadena en la variable d.

La línea if(string.IsNullOrEmpty(d)) comprueba si la cadena ya está vacía y luego devuelve la cadena vacía.

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

Estas declaraciones crean un nuevo documento HTML y cargan los datos en el documento. Ya es una cadena de etiquetas HTML y seguirá el patrón HTML.

La var accTags = new String[] { "strong", "em", "u"}; La línea indica qué etiquetas se permitirán. Puede cambiar, agregar o eliminar las etiquetas según sus requisitos.

Luego, en el bucle while, utiliza la cola para agregar todos los nodos del documento, saca cada nodo de la cola y elimina la etiqueta HTML.

El proceso continúa hasta que se desinfectan todos los datos y luego devuelve el HTML interno del documento HTML, que ya es un texto desinfectado.

Como se dijo anteriormente, no existe una regla o método estricto y rápido para lograr esta tarea. Hay múltiples formas, y ninguna es completamente confiable.

Este código ha sido probado para un conjunto de datos bajo. Nunca podemos confiar en la entrada del usuario.

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

Artículo relacionado - Csharp String