クライアント側とサーバー側でマークダウンを解析してサニタイズしようとしています。
クライアント側では、PageDownをマークダウン エディターとして使用します。これはまさに StackOverflow が使用するものであり、気の利いたプレビュー ボックスが付属しています。このプレビュー ボックスにはサニタイズされた html が表示されるため、
<div>
タグなどは削除されます。
ただし、2 つの出力が同じではないケースを見つけています。例えば:
入力マークダウン: 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.");
}
}
なぜこれが起こっているのか理解できますし、2 つの異なるシステムが 2 つの異なる出力を生成することに驚きはありません。私の質問は<div>
、追加のタグを追加するのではなく、単にタグを削除するように JSoup をセットアップするにはどうすればよい<p>
ですか?
私の最終的な目標は、サーバー側の解析/サニタイズで、クライアント側の解析/サニタイズと同様の結果が生成されるようにすることです。それを行うためのより良い方法があれば、私は提案を受け入れます。2 つの出力がまったく同じかどうかはあまり気にしませんが、余分な<p>
タグなどはユーザーにとって非常に目立つので、この 1 つの大きな違いを排除しようとしています。
おまけの質問: PageDown が出力できる html タグと属性のリストはありますか?
編集: OWASP サニタイザーも使用してみましたが、非常によく似た結果が得られます。<div>
タグは削除されますが、<p>
タグは上記の方法で「修正」され、PageDown のサニタイザーとは異なる html になります。