2011-01-14 89 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