我正在寻找一种方法来检查包含html的字符串,并确定它是否包含任何应该可见的文本,而不是计算空格。
基本上,如果将其呈现为innerHTML
的{{1}}时显示为可见文字,则任何内容都应计为可见。
例如
<div>
可见,因为浏览器中显示“hello”。 <div>hello</div>
不可见。<div><p> <br/></div>
不可见。 <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在这里没什么关系。
答案 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()
从字符串中删除标记