我正在嘗試使用JTidy(jtidy-r938.jar)來清理輸入的HTML字符串,但我似乎遇到了將默認設置正確的問題。經常收集「hello world」之類的字符串,最終會成爲「helloworld」。我想在這裏展示我在做什麼,並且任何指針都會非常感謝:正確使用JTidy來淨化HTML
假設rawHtml
是包含輸入(真實世界)HTML的字符串。這是我在做什麼:
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");
首先,上面的代碼看起來根本不對嗎?我似乎正在得到奇怪的結果。
例如,請考慮以下輸入:
<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>
輸出是:
<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>
所以,
「公共字符串parseDescription」 變成 「publicString parseDescription」
提前致謝!
我也注意到jTidy會將' '轉換爲字節'a0',打印爲空格('Node.getNodeValue()'),但是當你嘗試轉換爲UTF8字符串時,它會打印出'?'因爲它不是有效的UTF字符!那麼這是[unicode](http://www.unicode.org/charts/PDF/U0080.pdf),但不是HTML,並顯示爲「?」。 – Chloe 2014-01-16 22:46:23