Eliminar etiquetas HTML de una cadena

Resuelto Mason asked hace 16 años • 35 respuestas

¿Existe una buena manera de eliminar HTML de una cadena de Java? Una expresión regular simple como

replaceAll("\\<.*?>", "") 

funcionará, pero algunas cosas como &amp;no se convertirán correctamente y se eliminarán los textos que no sean HTML entre los dos corchetes angulares (es decir, la .*?expresión regular desaparecerá).

Mason avatar Oct 27 '08 23:10 Mason
Aceptado

Utilice un analizador HTML en lugar de expresiones regulares. Esto es muy simple con Jsoup .

public static String html2text(String html) {
    return Jsoup.parse(html).text();
}

Jsoup también admite la eliminación de etiquetas HTML en una lista blanca personalizable, lo cual es muy útil si desea permitir solo, por ejemplo <b>, <i>y <u>.

Ver también:

  • RegEx coincide con etiquetas abiertas, excepto etiquetas XHTML autocontenidas
  • ¿Cuáles son las ventajas y desventajas de los principales analizadores HTML de Java?
  • Prevención XSS en aplicaciones web JSP/Servlet
BalusC avatar Jun 30 '2010 13:06 BalusC

Si estás escribiendo para Android , puedes hacer esto...

androidx.core.text.HtmlCompat.fromHtml(instrucción,HtmlCompat.FROM_HTML_MODE_LEGACY).toString()

Ken Goodridge avatar Jun 17 '2011 12:06 Ken Goodridge

Si el usuario ingresa <b>hey!</b>, ¿quiere mostrar <b>hey!</b>o hey!? Si es el primero, escape menos que y codifique los símbolos comerciales en html (y, opcionalmente, comillas) y estará bien. Una modificación a su código para implementar la segunda opción sería:

replaceAll("\\<[^>]*>","")

pero tendrás problemas si el usuario ingresa algo con formato incorrecto, como <bhey!</b>.

También puede consultar JTidy , que analizará la entrada html "sucia" y debería brindarle una manera de eliminar las etiquetas, manteniendo el texto.

El problema de intentar eliminar HTML es que los navegadores tienen analizadores muy indulgentes, más indulgentes que cualquier biblioteca que pueda encontrar, por lo que incluso si hace todo lo posible para eliminar todas las etiquetas (usando el método de reemplazo anterior, una biblioteca DOM o JTidy) , aún deberá asegurarse de codificar los caracteres especiales HTML restantes para mantener segura su salida.

Chris Marasti-Georg avatar Oct 27 '2008 17:10 Chris Marasti-Georg