2010-03-30 13 views
5

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;">&nbsp;&nbsp;&nbsp;</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!

+0

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

Respuesta

1

Así es como llamamos a JTidy de Ant. Es posible inferir la llamada a la API de ella:

<tidy destdir="${build.dir.result}"> 
    <fileset dir="${src}" includes="**/*.htm"/> 
    <parameter name="tidy-mark" value="false"/> 
    <parameter name="output-xml" value="no"/> 
    <parameter name="numeric-entities" value="yes"/> 
    <parameter name="indent-spaces" value="2"/> 
    <parameter name="indent-attributes" value="no"/> 
    <parameter name="markup" value="yes"/> 
    <parameter name="wrap" value="2000"/> 
    <parameter name="uppercase-tags" value="no"/> 
    <parameter name="uppercase-attributes" value="no"/> 
    <parameter name="quiet" value="no"/> 
    <parameter name="clean" value="yes"/> 
    <parameter name="show-warnings" value="yes"/> 
    <parameter name="break-before-br" value="yes"/> 
    <parameter name="hide-comments" value="yes"/> 
    <parameter name="char-encoding" value="latin1"/> 
    <parameter name="output-html" value="yes"/> 
</tidy> 
3

Tener un vistazo a cómo se configura JTidy:

StringWriter writer = new StringWriter(); 
tidy.getConfiguration().printConfigOptions(writer, true); 
System.out.println(writer.toString()); 

Tal vez a continuación, obtener claro lo que causa el problema.

¿Qué es raro? Un pequeño ejemplo, de producción real y esperado ... ¿tal vez?

+0

Sí, actualicé la publicación con el extraño problema – ragebiswas

+0

también resolvió mi problema, ¡gracias! – jambriz

Cuestiones relacionadas