Estoy tratando de usar JTidy (jtidy-r938.jar) para desinfectar una cadena HTML de entrada, pero parece que tengo problemas para obtener la configuración predeterminada correcta. A menudo, cadenas como "hello world" terminan como "helloworld" después de poner en orden. Quería mostrar lo que estoy haciendo aquí, y cualquier puntero sería muy apreciado:Uso adecuado de JTidy para purificar HTML
Supongamos que rawHtml
es la cadena que contiene el HTML de entrada (mundo real). Esto es lo que estoy haciendo:
Tidy tidy = new Tidy();
tidy.setPrintBodyOnly(true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
tidy.parse(new StringReader(rawHtml), ps);
return baos.toString("UTF8");
En primer lugar, ¿algo se ve fundamentalmente mal con el código anterior? Parece que estoy obteniendo resultados extraños con esto.
Por ejemplo, considere la siguiente entrada:
<p class="MsoNormal" style="text-autospace:none;"><font color="black"><span style="color:black;">???</span></font><b><font color="#7f0055"><span style="color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;"> String parseDescription</span></font><font>
La salida es:
<p class="MsoNormal" style="text-autospace:none;"><font color= "black"><span style="color:black;"> </span></font> <b><font color="#7F0055"><span style= "color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;">String parseDescription</span></font></p>
Así,
"parseDescription public String" se convierte en "publicString parseDescription"
Gracias de antemano!
También noté que jTidy convertirá ' ' en byte 'a0', que se imprime como espacio (' Node.getNodeValue() '), pero cuando intente convertir a una cadena UTF8, se imprimirá'? ' ¡porque no es un personaje UTF válido! Bueno, es [unicode] (http://www.unicode.org/charts/PDF/U0080.pdf), pero no es HTML y se muestra como '?'. – Chloe