我正在尝试在客户端和服务器端解析和清理降价。
在客户端,我使用PageDown作为降价编辑器。这正是 StackOverflow 使用的,它带有一个漂亮的预览框。这个预览框向您展示了经过清理的 html,因此它会删除
<div>
标签等内容。
但是,我发现两者的输出不同的情况。例如:
输入降价: how are <div>tags</div> treated?
PageDown 输出: <p>how are tags treated?</p>
PegDown/JSoup 输出:
<p>how are </p>tags treated?
<p></p>
我没有对 JSoup 做任何花哨的事情。这是我的代码:
public class Main {
public static void main(String... args){
PegDownProcessor pdp = new PegDownProcessor();
String markdown = "how are <div>tags</div> treated?";
String html = pdp.markdownToHtml(markdown);
Whitelist whitelist = Whitelist.relaxed().removeTags("div");
html = Jsoup.clean(html, whitelist);
System.out.println(html);
System.out.println("Done.");
}
}
我理解为什么会发生这种情况,我对两个不同的系统产生两个不同的输出并不感到惊讶。我的问题是:如何设置 JSoup 以便它简单地删除<div>
标签而不是添加额外的<p>
标签?
我的最终目标是让服务器端解析/清理生成与客户端解析/清理相当相似的结果。如果有更好的方法可以做到这一点,我愿意接受建议。我真的不在乎两者的输出是否完全相同,但是像额外<p>
标签这样的东西会被用户注意到,所以我试图消除这一主要区别。
额外的问题:是否有 PageDown 可以输出的 html 标签和属性的列表?
编辑:我也尝试过使用OWASP sanitizer,但我得到了非常相似的结果:<div>
标签被删除,但<p>
标签以上述方式“固定”,这导致与 PageDown 的 sanitizer 不同的 html。