【问题标题】:Is there any method to identify whether a string contains HTML tags in java有什么方法可以识别字符串是否包含java中的HTML标签
【发布时间】:2020-03-30 18:48:37
【问题描述】:

是否有任何预定义的方法来说明字符串中是否包含 HTML 标记或字符?

【问题讨论】:

  • 没有。您的实际问题是什么,可能有更好的解决方案。
  • 你可以尝试在你的字符串上使用类似JSoup的东西,看看长度是否改变。如果长度没有变化,则意味着该字符串不包含 HTML。
  • JSoup 是一个非常好的 HTML 解析器,它取决于您在字符串中查找 HTML 代码的目的......
  • 在我的场景中,我在运行时获得了各种字符串对象。该字符串可能包含也可能不包含 HTML 标记。通过 HTML 标签,我的意思是字符串不一定以 开头并以 结尾,但它可以是这样的:<br/>Test Plan: YTL Test Plan for Release 1<br/><br/>Test Case: Clarity TC - Provisioning 1<br/> 我需要将包含的 html 字符串解析为普通字符串

标签: java html string


【解决方案1】:

你可以试试正则表达式,像这样

private static final String HTML_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
private Pattern pattern = Pattern.compile(HTML_PATTERN);

public boolean hasHTMLTags(String text){
    Matcher matcher = pattern.matcher(text);
    return matcher.find();
}

【讨论】:

  • 认为你的方法需要是pattern.matcher(text).find()
  • 请注意,包含重复替代路径(即 (A|B)*)的正则表达式可能会遇到 StackOverflowErrors。有关更多信息,请参阅此问题/答案:stackoverflow.com/questions/7509905/…
【解决方案2】:

使用正则表达式搜索或识别String中的HTML标签。

boolean containsHTMLTag = stringHtml.matches(".*\\<[^>]+>.*");

或者按照 Tim 的建议使用 Jsoup,如下所示:-

String textOfHtmlString = Jsoup.parse(htmlString).text();
boolean containedHTMLTag = !textOfHtmlString.equals(htmlString);

【讨论】:

  • 关于正则表达式,我有两个问题:首先,你不是像这样".*\\&lt;[^&gt;]+\\&gt;.*" 那样逃避关闭的“>”,其次,xml 文档似乎也适合这个正则表达式
  • 我会试用 Jsoup 并确认
  • Jsoup 方法效果很好,但请注意,它会标记任何带有额外空格的字符串。
  • jsoup 不起作用。 Parse 也会删除新行。所以你可能会得到一个误报
  • JSOUP 不起作用 - 当我通过“aaaa”时,它会给出 HTML 输出 - 所以长度检查将始终通过
【解决方案3】:

你应该使用 find()

private static final String HTML_TAG_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";

static Pattern htmlValidator = TextUtils.isEmpty(HTML_TAG_PATTERN) ? null:Pattern.compile(HTML_TAG_PATTERN);

public static boolean validateHtml(final String text){
    if(htmlValidator !=null)
      return htmlValidator.matcher(text).find();
    return false;
  }

【讨论】:

    【解决方案4】:

    使用正则表达式解析字符串以搜索 HTML(在我的情况下是为了防止 XSS 攻击相关的输入)不是正确的方法。

    实现它的一个好方法是使用Spring HtmlUtils

    这里已经对两者进行了更好的解释,

    https://codereview.stackexchange.com/questions/112495/preventing-xss-attacks-in-a-spring-mvc-application-controller

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 2015-03-17
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 2014-12-20
      相关资源
      最近更新 更多