【问题标题】:Java replace all non-HTML Tags in a StringJava 替换字符串中的所有非 HTML 标签
【发布时间】:2011-06-09 03:47:37
【问题描述】:

如果字符串中所有看起来像标签的部分不是有效的 HTML 标签,我想替换它们。 看起来像标签的部分是用<> 括号括起来的东西。例如。 <myemail@email.com><hello> 但必须保留 <br><div> 等。

您知道如何实现这一目标吗?

感谢任何帮助!

干杯,

巴拉兹

【问题讨论】:

  • 替换还是删除?请显示预期输出。
  • "一二三
    " 到 "一二三四五
    " - 所以替换为空字符串。

标签: java tags html-parsing


【解决方案1】:

您可以使用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>

【讨论】:

    【解决方案2】:

    查看 java.util.Scanner 类 - 您可以设置一个分隔符,然后查看字符串是否与 HTML 标记匹配 - 您必须构建一个应该被忽略的字符串数组。

    【讨论】:

    【解决方案3】:

    您可能还希望在比较算法中包含结束标签。因此,您可能需要查找正斜杠(html 结束标记)并在比较之前将其剥离。

    【讨论】:

      【解决方案4】:

      如果您这样做是为了在网页上显示不受信任的数据,那么简单地删除无效标签是不够的。看看OWASP AntiSamy

      【讨论】:

      • 感谢您的提示,我会看看它,但这次我希望它们简单地删除。不多也不少。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多