2010-02-25 86 views
13

Duplicar posible:
How to clean HTML tags using C#¿Cómo puedo quitar las etiquetas HTML en C#

¿Cuál es la mejor manera de quitar las etiquetas HTML en C#?

+1

¿Sabes qué etiquetas quieres quitar? ¿O es todo? Incluso si las etiquetas html cambian en el futuro, ¿aún desea que el código funcione? ¿La entrada siempre será válida XHTML? –

+1

Duplicado: http://stackoverflow.com/questions/787932/using-c-regular-expressions-to-remove-html-tags http://stackoverflow.com/questions/785715/asp-net-strip-html- etiquetas y http://stackoverflow.com/questions/1038431/how-to-clean-html-tags-using-c –

Respuesta

2

Para garantizar que no se traspasen las etiquetas HTML, use: HttpServerUtility.HtmlEncode(string);.

Si desea unos para pasar, puede utilizar este "Whitelist" approach.

Actualización: Se han encontrado algunas vulnerabilidades en ese código; como Developer from Fog Creek tells us.

(El segundo enlace incluye el código).

+9

HTMLEncode ("La etiqueta de la imagen: "))%> Salida: la etiqueta de la imagen: < img & gt que no es lo mismo que Strip it. –

+0

Todo depende del resultado que quiera. Si quiere asegurarse de que nunca se ejecuten etiquetas HTML (y así se abra a XSS), entonces la primera forma es la "mejor" manera. Si solo quiere que aparezca texto plano, una variación de la segunda forma es "mejor". –

+0

Es posible que desee eliminar las etiquetas para mostrarlas como texto sin cifrar en rss-feed o algo así. En PHP tiene una función integrada llamada http://php.net/strip_tags, que de su sonido es lo que quiere. Pero la lista blanca resuelve eso, también puedes usar ese HTML Pack o lo que se llame ... –

20
public static string StripHTML(string htmlString) 
    { 

    string pattern = @"<(.|\n)*?>"; 

    return Regex.Replace(htmlString, pattern, string.Empty); 
    } 
+0

Buena búsqueda en Google .. –

+5

mi placer, a su servicio, mam –

+2

Ick, esta pregunta se repite mucho en SO, y esta misma mala respuesta se repite mucho también. Como ya dije en otra publicación idéntica: "No debe usar una expresión regular para analizar una gramática libre de contexto como HTML. Si el HTML está siendo proporcionado por alguna entidad externa, entonces puede ser fácilmente manipulado para evadir su expresión regular " –

7

Tome su cadena HTML o documento y analícelo con HTML Agility Pack. Esto le dará un objeto HTMLDocument que es muy similar a un XmlDocument.

A continuación, puede utilizar es de métodos tales como SelectNodes acceder a aquellas partes del documento que le interesa.

Si usted elige utilizar otro enfoque, tenga en cuenta que el análisis de HTML (un lenguaje no regular) con expresiones regulares es ampliamente considerado como a bad idea.

E independientemente del enfoque, si está manteniendo un margen de beneficio, use un enfoque de lista blanca. Esto significa eliminar todo lo que no se desea explícitamente.

+0

HTML Agility Pack me salvó un día. +1 – kenny

+0

¿Qué sucede si no es un documento bien formado? Por ejemplo, solo un montón de texto con una etiqueta en algún lugar adentro, ¿lo analizará Agility Pack por ti? –

+0

@EgorPavlikhin sí, y arreglará el marcado no válido y hará un documento html válido. – Dementic

Cuestiones relacionadas