检测HTML字符串是否包含C#中的可见文本

时间:2013-12-05 00:45:03

标签: c# .net asp.net-mvc

我正在寻找一种方法来检查包含html的字符串,并确定它是否包含任何应该可见的文本,而不是计算空格。

基本上,如果将其呈现为innerHTML的{​​{1}}时显示为可见文字,则任何内容都应计为可见。

例如

  • <div>可见,因为浏览器中显示“hello”。
  • <div>hello</div>不可见。
  • <div><p> <br/></div>&nbsp;不可见。
  • <script>alert('asdf')</script>可见,但它不包含任何html标记。

有很多案例我不确定(任何结果都可以接受):

  • plain text不可见,但由于css为问题增加了另一层复杂性,因此不打扰它可能是一个好主意。
  • <div style="display: none">this is tricky</div>应超出此问题的范围。
  • <script>document.write('What is this, I don't even-')</script>是可见的,但我现在不关心表单元素,所以这可能也不可见。

我想决定这个服务器端并相应地处理这种情况。

有没有一种好方法可以在C#中做出决定?编写我自己的解决方案似乎很乏味,我想知道是否有人已经这样做了(或类似的东西)。

编辑:

这个问题难以理解吗?我已经声明我想在服务器上进行,而不是在浏览器环境中进行。 jQuery和jsfiddle在这里没什么关系。

1 个答案:

答案 0 :(得分:1)

  public static bool StripHTMLAndCheckVisible(string HTMLText)
    {
        if (string.IsNullOrEmpty(HTMLText))
            return false;
        else
        {
            Regex regJs=new Regex(@"(?s)<\s?script.*?(/\s?>|<\s?/\s?script\s?>)",RegexOptions.IgnoreCase);
            HTMLText = regJs.Replace(HTMLText, "");
            Regex reg = new Regex("<[^>]+>", RegexOptions.IgnoreCase);
            HTMLText = reg.Replace(HTMLText, "");
            return string.IsNullOrEmpty(HTMLText) ? false : true;
        }
    }

它将删除所有HTML,Javascript标记,如果可见则返回true,否则返回false。 希望这有帮助。


修改

我最终做的是:

public static bool CheckHTMLForText(string html)
{
    var stripped = StringHelpers.StripTagsWithContent(html, "script", "style");
    stripped = StringHelpers.StripTagsRegex(stripped);
    return string.IsNullOrWhiteSpace(stripped);
}

StringHelpers.StripTagsWithContent()将给定标记与其内容通过其结尾标记(如上例中的脚本标记的内容)一起剥离,StringHelpers.StripTagsRegex()从字符串中删除标记