4

我必须将用户输入文本以HTML and CSS格式存储在我的数据库中。

案例是:

RadEditor,用户将文本从 MSWord 复制到此编辑器,然后我将此文本以该格式存储在数据库中。然后当检索报告中的数据或某些标签时,一些标签会出现在文本周围!

我使用正则表达式来删除所有格式,但它有时会成功,但并非总是成功。

private static Regex oClearHtmlScript = new Regex(@"<(.|\n)*?>", RegexOptions.Compiled);

        public static string RemoveAllHTMLTags(string sHtml)
        {

            sHtml = sHtml.Replace("&nbsp;", string.Empty);
            sHtml = sHtml.Replace("&gt;", ">");
            sHtml = sHtml.Replace("&lt;", "<");
            sHtml = sHtml.Replace("&amp;", "&");
            if (string.IsNullOrEmpty(sHtml))
                return string.Empty;

            return oClearHtmlScript.Replace(sHtml, string.Empty);
        }

我问如何使用HTMLAgility或任何可靠的方式删除所有格式以确保文本是纯的?

Note:数据库中该字段的数据类型为Lvarchar

4

4 回答 4

3

HtmlAgility 包使处理 HTML 变得容易。

HtmlDocument mainDoc = new HtmlDocument();
string htmlString = "<html><body><h1>Test</h1> more text</body></html>"
mainDoc.LoadHtml(htmlString);
string cleanText = mainDoc.DocumentNode.InnerText;
于 2013-04-30T19:41:59.040 回答
3

这应该从字符串中删除所有 html 标记。

sHtml = Regex.Replace(sHtml, "<.*?>", "");
于 2013-04-30T15:59:56.407 回答
2

这篇文章推荐了以下方法(并且似乎已被接受)。

Regex.Replace(myHTMLString, @"<p>|</p>|<br>|<br />", "\r\n", );
Regex.Replace(myHTMLString, @"<.+?>", string.Empty);

鉴于您仍然遇到困难,您可以尝试实例化 RadEditor 并使用 .Text 属性。我以前没有使用过 RadEditor,但我做了一些挖掘——你能试试这样的吗?

RadEditor editor = new RadEditor();
editor.Content = myHTMLString;
string plainText = editor.Text;

这可能是一个非常昂贵的操作,但我很想知道它是否有效!

于 2013-04-30T15:51:18.420 回答
1

请在此处查看我的答案,了解如何使用 Agility Pack 完成此操作。您可能需要稍微更改代码,以免删除少于两个字符的单词。此外,换行符也将被删除,因此您将留下一长行文本。

于 2013-05-01T14:11:41.650 回答