2010-03-30 7 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 преобразует ' ' в byte 'a0', который печатает как пробел (' Node.getNodeValue() '), но когда вы пытаетесь преобразовать в строку UTF8, он распечатает'? ' потому что это не действительный символ UTF! Ну, это [unicode] (http://www.unicode.org/charts/PDF/U0080.pdf), но не является HTML и отображается как '?'. – Chloe

ответ

1

Вот как мы называем JTidy от Ant. Вы можете сделать вывод вызова 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

+0

решил мою проблему тоже, thx! – jambriz