Я использую java-библиотеку Tidy для дезинфекции html-кода. В некотором коде содержатся ссылки с русскими буквами. Например,Tidy разрывает ссылки с не-латинскими символами
<a href="http://example.com/Русский">link with Russian letters</a>
Я понимаю, что «Русский» должен быть экранирован, но я получаю этот html от пользователей. И моя задача - преобразовать его в XHTML.
Я думаю, опрятный пытается избежать не-латинских букв, но в результате я получаю
<a href="http://example.com/%420%443%441%441%43A%438%439">link with Russian letters</a>
Это не Corect. Правильная версия
<a href="http://example.com/%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9">link with Russian letters</a>
Java код
private static Tidy getTidy() {
if (null == tidy) {
tidy = new Tidy();
tidy.setQuiet(true);
tidy.setShowErrors(0);
tidy.setShowWarnings(false);
tidy.setXHTML(true);
tidy.setOutputEncoding("UTF-8");
}
return tidy;
}
public static String sanitizeHtml(String html, URI pageUri) {
boolean escapeMedia = false;
String ret = "";
try {
Document doc = getTidy().parseDOM(new StringReader("<body>" + html + "</body>"), null);
// here I make some processing
// string output
ByteArrayOutputStream out = new ByteArrayOutputStream();
Node node = doc.getElementsByTagName("body").item(0);
getTidy().pprint(node, out);
ret = out.toString().trim();
}
catch (Exception e) {
ret = html;
e.printStackTrace();
}
return ret;
}
Спасибо. Я попрошу моего друга, который знает java, правильно исправить эту ошибку и отправить команду в порядке. – Alexei