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