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