2010-03-30 28 views
5

我正在嘗試使用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;">&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>

所以,

「公共字符串parseDescription」 變成 「publicString parseDescription」

提前致謝!

+0

我也注意到jTidy會將' '轉換爲字節'a0',打印爲空格('Node.getNodeValue()'),但是當你嘗試轉換爲UTF8字符串時,它會打印出'?'因爲它不是有效的UTF字符!那麼這是[unicode](http://www.unicode.org/charts/PDF/U0080.pdf),但不是HTML,並顯示爲「?」。 – Chloe 2014-01-16 22:46:23

回答

1

以下是我們如何從Ant調用JTidy。你可以從中推斷API調用:

<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

看一看JTidy是如何配置:

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

也許它然後得到明確是什麼原因導致的問題。

什麼是奇怪的?小實例,實際產出和預期...也許?

+0

是的,用奇怪的問題更新了帖子 – ragebiswas 2010-04-12 08:13:40

+0

也解決了我的問題,thx! – jambriz 2013-06-21 16:06:36