2010-03-30 16 views
5

Sto tentando di utilizzare JTidy (jtidy-r938.jar) per disinfettare una stringa HTML di input, ma sembra che abbia problemi a ottenere le impostazioni predefinite corrette. Spesso le stringhe come "Hello World" finiscono come "helloworld" dopo aver riordinato. Volevo mostrare ciò che sto facendo qui e qualsiasi suggerimento sarebbe davvero apprezzato:Uso corretto di JTidy per purificare l'HTML

Si supponga che rawHtml sia la stringa contenente l'HTML di input (mondo reale). Questo è quello che sto facendo:

 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"); 

Prima di tutto, qualcosa sembra fondamentalmente sbagliato con il codice precedente? Mi sembra di ottenere risultati strani con questo.

Ad esempio, si consideri il seguente testo:

<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>

L'output è:

<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>

Quindi,

"public String parseDescription" diventa "publicString parseDescription"

Grazie in anticipo!

+0

Ho anche notato che jTidy convertirà ' ' in byte 'a0', che stampa come spazio (' Node.getNodeValue() '), ma quando provate a convertire in una stringa UTF8, stamperà'? ' perché non è un carattere UTF valido! Bene è [unicode] (http://www.unicode.org/charts/PDF/U0080.pdf), ma non è HTML e viene visualizzato come '?'. – Chloe

risposta

1

Ecco come chiamiamo JTidy da Ant. Si può dedurre la chiamata API da esso:

<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

Avere uno sguardo a come è configurato JTidy:

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

Forse è quindi ottenere chiaro ciò che provoca il problema.

Che cosa è strano? Piccolo esempio di output effettivo e previsto ... forse?

+0

Sì, ho aggiornato il post con lo strano problema – ragebiswas

+0

risolto anche il mio problema, grazie! – jambriz