在 C# 中从字符串中删除 HTML 标记

Saad Aslam 2023年1月30日 2022年7月18日
  1. C# 中使用正则表达式从字符串中删除 HTML 标签
  2. C# 中使用 HTML Agility Pack 从字符串中删除 HTML 标签
在 C# 中从字符串中删除 HTML 标记

在这篇文章中,我们将演示如何在不知道其中包含哪些标签的情况下从字符串中删除所有 HTML 标签。

有很多方法可以完成这项任务,但没有一种方法可以保证你删除所有标签。我们将看看它的一些方法。

C# 中使用正则表达式从字符串中删除 HTML 标签

public static string StripHTML(string input)
{
   return Regex.Replace(input, "<[a-zA-Z/].*?>", String.Empty);
}

这个函数传递一个字符串参数,我们使用 regexReplace() 函数来删除标签,因为标签的签名在函数输入中给出。

它不适用于所有情况,但大多数情况都很好。你将需要编写算法以从字符串输入中删除所有标签。

C# 中使用 HTML Agility Pack 从字符串中删除 HTML 标签

另一种解决方案是使用 HTML Agility Pack

internal static string RmvTags(string d)
{
if(string.IsNullOrEmpty(d))
return string.Empty;

    var doc = new HtmlDocument();
    doc.LoadHtml(d);

    var accTags = new String[] { "strong", "em", "u"};
    var n = new Queue<HtmlNode>(doc.DocumentNode.SelectNodes("./*|./text()"));
    while(n.Count > 0)
    {
        var no = nodes.Dequeue();
        var pNo = no.ParentNode;

		if(!accTags.Contains(no.Name) && no.Name != "#text")
        {
            var cNo = no.SelectNodes("./*|./text()");

            if (cNo != null)
            {
                foreach (var c in cNo)
                {
                    n.Enqueue(c);
                    pNo.InsertBefore(c, no);
                }
            }
            pNo.RemoveChild(no);
        }
    }
    return doc.DocumentNode.InnerHtml;
}

除了 strongemu 和原始文本节点之外,这将正常工作。此函数将字符串作为 d 变量中的参数。

if(string.IsNullOrEmpty(d)) 行检查字符串是否已经为空,然后返回空字符串。

var doc = new HtmlDocument();
doc.LoadHtml(d);

这些语句创建一个新的 HTML 文档并将数据加载到文档中。它已经是一个 HTML 标记字符串,并且将遵循 HTML 模式。

var accTags = new String[] { "strong", "em", "u"}; 行告诉哪些标签是允许的。你可以根据需要更改、添加或删除标签。

然后在 while 循环中,它使用队列添加所有文档节点,使每个节点出列,并删除 HTML 标记。

该过程继续进行,直到所有数据都被净化,然后它返回 HTML 文档的内部 HTML,它已经是净化的文本。

如前所述,没有硬性规定或方法来完成这项任务。有多种方法,没有一种方法是完全可靠的。

此代码已针对低数据集进行了测试。我们永远不能相信用户的输入。

Author: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

相关文章 - Csharp String