检查 HtmlString 是不是是 C# 中的空格
Posted
技术标签:
【中文标题】检查 HtmlString 是不是是 C# 中的空格【英文标题】:Check if HtmlString is whitespace in C#检查 HtmlString 是否是 C# 中的空格 【发布时间】:2014-03-02 20:06:54 【问题描述】:我有一个包装器,只要它有一个值,它就会向一个字段添加一个标题。该字段实际上是一个字符串,其中包含来自 tinymce 文本框的 html。
要求:当字段为空或只有空格时,不应显示标题。
问题:html中的空白被渲染为<p>&nbsp; &nbsp;</p>
,所以从技术上讲它不是空值或空白值
我根本不能!String.IsNullOrWhiteSpace(Model.ContentField.Value)
,因为它确实有一个值,尽管是空白html。
我尝试将值转换为@Html.Raw(Model.ContentField.Value)
,但它属于HtmlString 类型,所以我不能使用String.IsNullOrWhiteSpace
。
有什么想法吗?谢谢!
【问题讨论】:
仅供参考,Html.Raw
只是这样做,因此字符串在呈现到页面时不会被 HTML 编码。即使您可以比较,您仍然会拥有所有实际标签等。
【参考方案1】:
你可以使用HtmlAgilityPack
,像这样:
HtmlDocument document = new HtmlDocument();
document.LoadHtml(Model.ContentField.Value);
string textValue = HtmlEntity.DeEntitize(document.DocumentNode.InnerText);
bool isEmpty = String.IsNullOrWhiteSpace(textValue);
【讨论】:
谢谢。很好的答案,但我忘了指出我不想依赖第三方库。如果有 mvc 或 httputility 内置的东西,那就最好了。 我检查了问题中上面给出的文本的代码。它不起作用。 HtmlDocument 文档 = 新 HtmlDocument(); string textValue = ""; bool isEmpty = String.IsNullOrWhiteSpace(textValue); @Thanigainathan 您忘记了内部文本的加载和获取。从你的,它应该是: document.LoadHtml(textValue);字符串 innerValue = document.DocumentNode.InnerText;然后比较 innerValue 是否为 null 或空格。 @Thanigainathan,你是对的。那是一个快速的帖子,完全没有头脑。现在它已经过测试,更新为
HtmlEntity.DeEntitize
,并且可以正常工作。【参考方案2】:
我最终所做的(因为我不想为此添加一个 3rd 方库),是在一个辅助类中添加一个去除 HTML 标签的函数:
const string HTML_TAG_PATTERN = "<.*?>";
public static string StripHTML(string inputString)
return Regex.Replace
(inputString, HTML_TAG_PATTERN, string.Empty);
之后,我将它与HttpUtility.HtmlDecode
结合起来得到内部值:
var innerContent = StringHelper.StripHTML(HttpUtility.HtmlDecode(Model.ContentField.Value));
那个变量是我用来比较的。如果这是一个坏主意,请告诉我。
谢谢!
【讨论】:
这应该也可以,除非 TinyMCE 使用像<comment>text</comment>
或 <script type="text/plain">text</script>
这样的不可见标签。再说一次,我也不确定HtmlAgilityPack
是否正确处理这些问题。【参考方案3】:
我有与您的标题类似的问题,但在我的情况下,html 字符串是空的。所以我最终做了以下事情:
HtmlString someString = new HtmlString("");
string.IsNullOrEmpty(someString.ToString());
可能很明显,但一开始并没有意识到。
【讨论】:
不行,因为 new HtmlString("").ToString() 仍然返回一个非空字符串,这不是 OP 想要的。以上是关于检查 HtmlString 是不是是 C# 中的空格的主要内容,如果未能解决你的问题,请参考以下文章