输入html为
<p>猫<虎</p>它可以被Chrome显示为猫<虎
但是,当您使用jsoup解析html时,则输出html为
<p>猫
<虎 < p>
</虎<></p>我如何解决这个问题而不修改
< to <发布于 2021-10-25 08:37:46
为什么你认为jsoup是“错误的”,而chrome是“正确的”?不是标记一部分的<应该始终转义为< (因为否则它将被解释为opening a tag) -解决这个问题,所有符合标准的html工具都将同意相同的解析。如果不解决这个问题,有些人可能会不同意。在本例中,JSoup接受非字母数字作为标记名,即invalid。但是它遇到了一个未转义的<,它不是标记名的一部分!
如果您坚持不更改源html,则可以在将其提供给JSoup之前对其进行预处理:
// before
Document doc = Jsoup.parse(html);
// with pre-processing
Document doc = Jsoup.parse(fixOutOfTagLessThan(html));哪里
/**
* Replaces not-in-tag `<` by `<`, but WILL FAIL in
* many cases, because it is unaware of:
* - comments (<!--)
* - javascript
* - the fact that you should NOT PARSE HTML WITH REGEX
*/
public static void fixOutOfTagLessThan(String html) {
return html.replaceAll("<([^</>]+)<", "<$1<");
}Chrome似乎将HTML5解析逻辑应用于treat the < as text (因为它不是有效标签名的一部分)--然而,据我所知,它应该拒绝>之前的所有内容,然后发出一个缺失的</p>。因此,在我看来,它似乎也没有完全遵循标准。
https://stackoverflow.com/questions/69704144
复制相似问题