C# 去除字符串中的html的格式并保留原本基础格式

2019年9月12日09:51:21 1 78

最近在弄一个项目的导出,先在文本编辑器中保存,保存的时候存的是html代码,导出时,如果不将格式清除的话,里面还包含大量html代码,给用户造成不好的体验。

经过万能的Google,终于在前辈们总结的经验中,实现了这个功能,这里就简单记录一下。

基础方法

  1. public static string DelHTML(string Htmlstring)//将HTML去除
  2.         {
  3.             #region
  4.             //删除脚本
  5.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>""", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  6.             //删除HTML
  7.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"<(.[^>]*)>""", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  8.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"([\r\n])[\s]+""", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  9.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"-->""", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  10.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"<!--.*""", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  11.             //Htmlstring =System.Text.RegularExpressions. Regex.Replace(Htmlstring,@"<A>.*</A>","");
  12.             //Htmlstring =System.Text.RegularExpressions. Regex.Replace(Htmlstring,@"<[a-zA-Z]*=\.[a-zA-Z]*\?[a-zA-Z]+=\d&\w=%[a-zA-Z]*|[A-Z0-9]","");
  13.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(quot|#34);""\"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  14.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(amp|#38);""&", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  15.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(lt|#60);""<", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  16.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(gt|#62);"">", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  17.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(nbsp|#160);"" ", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  18.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(iexcl|#161);""\xa1", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  19.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(cent|#162);""\xa2", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  20.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(pound|#163);""\xa3", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  21.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&(copy|#169);""\xa9", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  22.             Htmlstring = System.Text.RegularExpressions.Regex.Replace(Htmlstring, @"&#(\d+);""", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  23.             Htmlstring.Replace("<""");
  24.             Htmlstring.Replace(">""");
  25.             Htmlstring.Replace("\r\n""");
  26.             #endregion
  27.             return Htmlstring;
  28.         }

简易代码

  1. public string NoHtml(string html)
  2. {
  3.     string StrNohtml = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+>""");
  4.     StrNohtml = System.Text.RegularExpressions.Regex.Replace(StrNohtml, "&[^;]+;""");
  5.     return StrNohtml;
  6. }

功能增强代码

  1. public string NoHTML(string Htmlstring)  //替换HTML标记
  2. {
  3.     //删除脚本
  4.     Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>""", RegexOptions.IgnoreCase);
  5.     //删除HTML
  6.     Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>""", RegexOptions.IgnoreCase);
  7.     Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+""", RegexOptions.IgnoreCase);
  8.     Htmlstring = Regex.Replace(Htmlstring, @"-->""", RegexOptions.IgnoreCase);
  9.     Htmlstring = Regex.Replace(Htmlstring, @"<!--.*""", RegexOptions.IgnoreCase);
  10.     Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);""\"", RegexOptions.IgnoreCase);
  11.     Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);""&", RegexOptions.IgnoreCase);
  12.     Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);""<", RegexOptions.IgnoreCase);
  13.     Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);"">", RegexOptions.IgnoreCase);
  14.     Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);"" ", RegexOptions.IgnoreCase);
  15.     Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);""\xa1", RegexOptions.IgnoreCase);
  16.     Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);""\xa2", RegexOptions.IgnoreCase);
  17.     Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);""\xa3", RegexOptions.IgnoreCase);
  18.     Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);""\xa9", RegexOptions.IgnoreCase);
  19.     Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);""", RegexOptions.IgnoreCase);
  20.     Htmlstring = Regex.Replace(Htmlstring, @"<img[^>]*>;""", RegexOptions.IgnoreCase);
  21.     Htmlstring.Replace("<""");
  22.     Htmlstring.Replace(">""");
  23.     Htmlstring.Replace("\r\n""");
  24.     Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();
  25.     return Htmlstring;
  26. }

以上代码来源于CSDN作者:开心就是最好  ,但是输出的结果还不是我想要的效果。

然后又看到一个很不错的代码:做网站的时候,用到了去除html标签的问题,用正则匹配到html标签,然后replace即可。这个方法可以实现去除html标签的功能。Length参数可以根据传入值取固定长度的值。用于生成文章摘要比较方便。

  1. public static string ReplaceHtmlTag(string html, int length = 0)
  2. {
  3.     string strText = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+>""");
  4.     strText = System.Text.RegularExpressions.Regex.Replace(strText, "&[^;]+;""");
  5.     if (length > 0  && strText.Length > length)
  6.         return strText.Substring(0, length);
  7.     return strText;
  8. }

但这还不是我想要的,我想要的是将html转化为文本;

  1. /// <summary>
  2. /// html格式转换文本格式
  3. /// </summary>
  4. /// <param name="input">待转换的HTML文本</param>
  5. /// <returns>纯文本</returns>
  6. public static string FilterHtml(string input)
  7. {
  8.     if (input == null || input == "")
  9.         return input;
  10.     input = input.Replace("&""&amp;");
  11.     input = input.Replace("<""&lt;");
  12.     input = input.Replace(">""&gt;");
  13.     input = input.Replace(" ""&nbsp;");
  14.     input = input.Replace("\\", "&quot;");
  15.     input = input.Replace("\r\n", "<br>\r\n");
  16.     return input;
  17. }

这个代码,已经让我完成了一半的工作量了。但是最终效果还是没有实现,又细看了一下他们的代码,感觉只需要把我保存的标签使用正则给替换掉就好。

  1. /// <summary>
  2. /// html格式转换文本格式
  3. /// </summary>
  4. /// <param name="input"></param>
  5. /// <returns></returns>
  6. public static string FilterHtml(string input)
  7. {
  8.     if (input == null || input == "")
  9.         return input;
  10.     input = input.Replace("\r\n"""); //原始输入串,存放时有换行,先去掉
  11.     input = input.Replace("<p>""");
  12.     input = input.Replace("<a>""");
  13.     input = input.Replace("<div>""");
  14.     input = input.Replace("<strong>""");
  15.     input = input.Replace("</?p>""\r\n");
  16.     input = input.Replace("</p>""\r\n");
  17.     input = input.Replace("</?a>""");
  18.     input = input.Replace("</?div>""");
  19.     input = input.Replace("</?strong>""");
  20.     input = input.Replace("<br/>""\r\n");
  21.     return input;
  22. }

将我保存在数据库中的html去除标签,div a strong都去掉 p br标签直接换行,完美搞定。

在此感谢大佬前辈分享代码,so,身为小菜鸟的我,也做一个简单记录吧。

weinxin
微信公众号
博客微信公众号,欢迎关注。
不忘初心 牢记使命

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • avatar repostone 2

      非技术的路过。