Yo Programo .NET

C# - Quitar Tags HTML de una String

March 9, 2009 10:43 by fabian
Categorías: C# | BlogEngine

Con el desarrollo de la extensión SEO Pack para BlogEngine me encontré con un inconveniente en el proceso de limpiar la string para la meta tag Descripción.

La actual función no hace bien el trabajo, aquí les muestro como esta ahora la función:

private static Regex _Regex = new Regex("<[^>]*>", RegexOptions.Compiled);
private static string StripHtml(string html)
{
    if (string.IsNullOrEmpty(html))
        return string.Empty;
    html = _Regex.Replace(html, string.Empty);
    html = html.Replace("\r", "");
    html = html.Replace("\n", "");
    return html;
}
  • Lo primero que hago es crear un objeto Regex para el patrón <[^>]*>.
  • La función StripHtml reemplaza todos los hallados de este patrón con un string vacio.

¿Que esta mal?

En este post no veremos como trabaja las expresiones regulares, pero debemos saber que lo que queremos que encuentre el patrón de matcheo sea todo el texto que este incluido entre los tags.

Pero.. ¿Que sucede con los tags que no se cierran? como por ejemplo <br>, <p>, <img>, etc? El patrón actual de matcheo no será capaz de encontrarlos.

Para solucionar esto nuestra función debería quedar así.

private static Regex _Regex = new Regex(@"<(.|\n)*?>", RegexOptions.Compiled);
private static string StripHtml(string html)
{
    if (string.IsNullOrEmpty(html))
        return string.Empty;
    html = _Regex.Replace(html, string.Empty);
    html = html.Replace("\r", "");
    html = html.Replace("\n", "");
    html = html.Replace("\t", "");
    return html;
}

Comments

May 5. 2009 12:02 Santiago Herranz Marquez
Santiago Herranz Marquez
¿Cómo podriamos contemplar los < abiertos?

Conector Audi A3 < 2004 <font color=red> - 30€</font>

Tu expresión regular la he probado en Java y me daba:

Conector Audi A3 - 30 €
November 11. 2009 01:42 Nataly Lozano
Nataly Lozano
para eliminar html de un string

Imports System.Text.RegularExpressions.RegexOptions
Imports System.Text.RegularExpressions

Dim Cadena As String
        Cadena = oBEmensaje.CONTENIDO
        Cadena = Regex.Replace(Cadena, "<[^>]*>", "")
        lblMensaje.Text = Cadena

Add comment


(Will show your Gravatar icon)

biuquote
Loading