2011-01-14 142 views
4

我想替換字符串中所有標記外觀的部分(如果這些部分不是有效的HTML標記)。 標籤外觀部分是在<>括號內所包含的內容。例如。 <[email protected]><hello>但是<br>,<div>等等必須被保留。Java替換字符串中的所有非HTML標記

你有什麼想法如何做到這一點?

任何幫助表示讚賞!

歡呼聲,

巴拉茲

+0

替換或刪除?請顯示預期的輸出。 – dogbane 2011-01-14 13:49:46

+0

「one two three four five

six
」to「one two three four five
six
」 - 因此替換爲空字符串。 – 2011-01-14 13:58:07

回答

8

您可以使用JSoup來清理HTML。

String cleaned = Jsoup.clean(html, Whitelist.relaxed()); 

您可以使用已定義的Whitelists之一,也可以創建自己的自定義一個在你指定要允許通過清潔劑,其HTML元素。其他一切都被刪除。


你的具體例子是:

String html = "one two three <blabla> four <text> five <div class=\"bold\">six</div>"; 
String cleaned = Jsoup.clean(html, Whitelist.relaxed().addAttributes("div", "class")); 
System.out.println(cleaned); 

輸出:

one two three four five 
<div class="bold"> 
six 
</div> 
0

有一個看看java.util.Scanner中的類 - 你可以設置然後分隔符是否匹配字符串的HTML標記或不 - 你將不得不創建一個Array應該忽略的字符串。

+0

我不想自己創建數組,我寧願尋找一個已經存在的Enum,類似於http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/text/ html/HTML.Tag.html – 2011-01-14 13:54:57

+0

類似於這篇文章然後 - > http://stackoverflow.com/questions/240546/removing-html-from-a-java-string – ManseUK 2011-01-14 14:01:05

0

您可能還想在比較算法中加入結束標籤。所以你可能想要尋找一個正斜槓(html結束標記)並在比較之前將其去掉。

0

如果您爲了在網頁上顯示不可信數據而執行此操作,只需簡單地刪除無效標籤是不夠的。看看OWASP AntiSamy