检查 HtmlString 是不是是 C# 中的空格

Posted

技术标签:

【中文标题】检查 HtmlString 是不是是 C# 中的空格【英文标题】:Check if HtmlString is whitespace in C#检查 HtmlString 是否是 C# 中的空格 【发布时间】:2014-03-02 20:06:54 【问题描述】:

我有一个包装器,只要它有一个值,它就会向一个字段添加一个标题。该字段实际上是一个字符串,其中包含来自 tinymce 文本框的 html

要求:当字段为空或只有空格时,不应显示标题。

问题:html中的空白被渲染为<p>   </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 使用像 &lt;comment&gt;text&lt;/comment&gt;&lt;script type="text/plain"&gt;text&lt;/script&gt; 这样的不可见标签。再说一次,我也不确定HtmlAgilityPack 是否正确处理这些问题。【参考方案3】:

我有与您的标题类似的问题,但在我的情况下,html 字符串是空的。所以我最终做了以下事情:

HtmlString someString = new HtmlString("");
string.IsNullOrEmpty(someString.ToString());

可能很明显,但一开始并没有意识到。

【讨论】:

不行,因为 new HtmlString("").ToString() 仍然返回一个非空字符串,这不是 OP 想要的。

以上是关于检查 HtmlString 是不是是 C# 中的空格的主要内容,如果未能解决你的问题,请参考以下文章

如何检查数组是不是是Javascript中的空数组数组

为啥使用 null 函数而不是 == [] 来检查 Haskell 中的空列表?

我可以告诉 C# 可空引用方法实际上是对字段的空检查吗

C#,多个 == 运算符重载,没有模棱两可的空值检查

检查输入字段中的空值的正确方法是啥[重复]

C#中泛型参数的空值或默认比较