2009-08-28 13 views
8

Tengo una página web asp.net que tiene una caja TinyMCE. Los usuarios pueden formatear texto y enviar el HTML para que se almacene en una base de datos.¿Cómo puedo eliminar HTML de texto en .NET?

En el servidor, me gustaría quitar el html del texto para poder almacenar solo el texto en una columna indexada de texto completo para buscar.

Es fácil quitar el html en el cliente usando la función text() de jQuery, pero realmente preferiría hacerlo en el servidor. ¿Hay utilidades existentes que pueda usar para esto?

EDIT

Ver mi respuesta.

EDITAR 2

alt text http://tinyurl.com/sillychimp

+0

¿Por qué usar TinyMCE si sólo vaya a eliminar todo el formato ?! –

+0

Estoy almacenando el html generado por TinyMCE para poder presentar el texto formateado a los usuarios. Voy a almacenar el texto html-stripped en una columna diferente para la búsqueda de texto completo. No creo que sea una buena idea indexar/buscar texto completo en una columna que contenga una tonelada de HTML. No incluí estos detalles en la pregunta original, porque no tiene nada que ver con mi problema. –

+3

+1 por hacerme reír con este mono –

Respuesta

13

he descargado el HtmlAgilityPack y creé esta función:

string StripHtml(string html) 
{ 
    // create whitespace between html elements, so that words do not run together 
    html = html.Replace(">","> "); 

    // parse html 
    var doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.LoadHtml(html); 

    // strip html decoded text from html 
    string text = HttpUtility.HtmlDecode(doc.DocumentNode.InnerText); 

    // replace all whitespace with a single space and remove leading and trailing whitespace 
    return Regex.Replace(text, @"\s+", " ").Trim(); 
} 
+0

Eche un vistazo a richardtallent comentario a su respuesta. –

+0

Ahora eche un vistazo. –

+0

Lo vi. Creo que me quedaré con las 5 líneas de código que he escrito. –

0

Puede usar algo como esto

string strwithouthtmltag;  
strwithouthtmltag = Regex.Replace(strWithHTMLTags, "<[^>]*>", string.Empty) 
0

Si se acaba de almacenar texto para la indexación a continuación, es probable que desee para hacer un poco más que simplemente eliminar el HTML, como ignorar palabras de finalización y eliminar palabras más cortas que (digamos) 3 caracteres. Sin embargo, una etiqueta simple y separador Una vez escribí algo parecido a esto:

public static string StripTags(string value) 
    { 
     if (value == null) 
      return string.Empty; 

     string pattern = @"&.{1,8};"; 
     value = Regex.Replace(value, pattern, " "); 
     pattern = @"<(.|\n)*?>"; 
     return Regex.Replace(value, pattern, string.Empty); 
    } 

Es viejo y estoy seguro de que puede ser optimizado (tal vez mediante un reg-ex compilado?). Pero funciona y puede ayudar ...

0

Usted podría:

  • Usar un área de texto simple y llano (estilo de altura/anchura/fuente/etc.) En lugar de TinyMCE.
  • Utilice las opciones de configuración integradas de TinyMCE para pelar HTML no deseado.
  • Utilice HtmlDecode (RegEx.Replace (mystring, "< [^>] +>", "") en el servidor.
2

Aquí hay enlace de código RefactorMe de Jeff Atwood por su Sanitize HTML method

+0

Y así es como equilibra las etiquetas para que no termine con el contenido de usuario de alguien al cerrar un div en su página que no se abrió: http: // refactormycode .com/codes/360-balance-html-tags – StriplingWarrior

0

Como es posible que tenga HTML con formato incorrecto en el sistema: BeautifulSoup o similares podrían usado.

Está escrito en Python; No estoy seguro de cómo se podría interconectar, utilizando el lenguaje .NET IronPython.

0

Puede utilizar HTQL COM, y consultar el origen de una consulta: <cuerpo> &tx;

1
TextReader tr = new StreamReader(@"Filepath"); 
string str = tr.ReadToEnd();  
str= Regex.Replace(str,"<(.|\n)*?>", string.Empty); 

pero es necesario tener un espacio de nombres que se hace referencia.e:

system.text.RegularExpressions 

sólo tienen esta lógica para su sitio web

+0

RegEX no es la elección ideal para analizar RegEx. Vea los comentarios a la respuesta de RioTera, pero si no tiene formato HTML, RegEx eliminará los datos incorrectos. – psubsee2003

Cuestiones relacionadas