2011-10-13 6 views
8

不要なHTMLを完全に削除するのではなくエスケープすることで、jsoupにHTMLを含む文字列を消去する方法はありますか?私の例:ではなく文字列を想定しJsoup - 不要なhtmlを削除しないでエスケープしてhtmlを整理する方法?

"This is &lt;b&gt;REALLY&lt;/b&gt; dirty code from <a href="www.rubbish.url.zzzz">haxors-r-us</a> 
+0

投稿機能リクエスト:https://github.com/jhy/jsoup/issues/515 –

答えて

3

:私は望んでいます何

This is REALLY dirty code from <a href="www.rubbish.url.zzzz">haxors-r-us</a> 

する文字列を "クリーン" である:

String dirty = "This is <b>REALLY</b> dirty code from <a href="www.rubbish.url.zzzz">haxors-r-us</a> 
String clean = Jsoup.clean(dirty, new Whitelist().addTags("a").addAttributes("a", "href", "name", "rel", "target")); 

これはの "きれい" の文字列が与えますHTML文書は(あなたの質問に応じて)解析されています。

public String escapeHtml(String source) { 
    Document doc = Jsoup.parseBodyFragment(source); 
    Elements elements = doc.select("b"); 
    for (Element element : elements) { 
     element.replaceWith(new TextNode(element.toString(),"")); 
    } 
    return Jsoup.clean(doc.body().toString(), new Whitelist().addTags("a").addAttributes("a", "href", "name", "rel", "target")); 
} 

「b」タグを引数にして、エスケープするタグのリストを渡すことができます。

関連する通過JUnitテスト:JSoupがページをフォーマットするので、私は私のテストの「期待」文字列であなたの「」タグの前に改行を「\ n」は追加

@Test 
public void testHtmlEscaping() throws Exception { 
    String source = "This is <b>REALLY</b> dirty code from <a href=\"www.rubbish.url.zzzz\">haxors-r-us</a>"; 
    String expected = "This is &lt;b&gt;REALLY&lt;/b&gt; dirty code from \n<a href=\"www.rubbish.url.zzzz\">haxors-r-us</a>"; 
    String transformed = transformer.escapeHtml(source); 
    assertEquals(transformed, expected); 
} 

注意。

関連する問題