从jsoup 1.7.3更新到1.8.1后,我得到了不同的结果。 在1.7.3中,title属性被返回转义,与输入相同,在1.8.1中br被转换为标签。 有没有办法可以避免这种行为?
String content = "<a href=\"javascript:openObj('Classifier_UUID')\" title=\"Test<br>Test\">Test<br>Test</a>";
Document document = Jsoup.parseBodyFragment(content);
document.outputSettings().charset(Charset.forName("ASCII")); //$NON-NLS-1$
System.out.println(document.body().html());
结果:
// 1.7.3 <a href="javascript:openObj('Classifier_UUID')" title="Test<br>Test">Test<br />Test</a>
// 1.8.1 <a href="javascript:openObj('Classifier_UUID')" title="Test<br>Test">Test<br>Test</a>
答案 0 :(得分:1)
有点晚了但可以帮助其他人。
我从jsoup 1.7.2 升级到 1.11.3 ,并且具有与转义不再隐含的相同行为。
以下代码为我做了诀窍:
String cleanText = Jsoup.clean(s, Whitelist.none());
//& and <,> are escaped from .clean call so we have to unescape them
String cleanUnencodedText = StringEscapeUtils.unescapeHtml3(cleanText);
String cleanEncodedText = StringEscapeUtils.escapeHtml3(cleanUnencodedText);
正如您所看到的,我首先不得不转发cleanedText
,因为& < <
被Jsoup.Clean
电话转义。
您可以使用unescapeHtml4
和escapeHtml4
代替Html 3版本。我不得不支持旧的html版本原因
例如,Html 4逃脱€
到€