jsoup:从1.7.3更新到1.8.1之后的结果不同,如何避免这种情况?

时间:2015-03-05 15:11:33

标签: java jsoup

从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&lt;br&gt;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&lt;br&gt;Test">Test<br />Test</a>
// 1.8.1 <a href="javascript:openObj('Classifier_UUID')" title="Test<br>Test">Test<br>Test</a>

1 个答案:

答案 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电话转义。

您可以使用unescapeHtml4escapeHtml4代替Html 3版本。我不得不支持旧的html版本原因 例如,Html 4逃脱&euro;