ASP.net(C#)中如何截取字符串时去除HTml标记

koudefa 2010-08-10 08:47:11
ASP.net(C#)中如何截取字符串时去除HTml标记


<a hrfe = "" >gafgafgdfgadfgadf </a>gfdagadfgadfgdafgdafgadfgdafgdafgdafgadfgdaf

截取前20个字符如果没有去掉html的标记截取的字符串就会出错
...全文
712 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dylan-Wang 2010-12-26
  • 打赏
  • 举报
回复
楼主说的出错应该是页面样式的跑偏,因为截取字符串中可能只有一半的html代码,如只有一个<div>而没有</div>,而关于html过滤这个方面,1楼的方法已经很全了,楼主完全可以引用的。
zhenshangzhengren 2010-12-25
  • 打赏
  • 举报
回复
呵呵,牛叉。这样的方法可以呢
村长_乐 2010-08-10
  • 打赏
  • 举报
回复
/// <summary>
/// 过滤HTML字符 和 UBB代码
/// </summary>
public static string NoCode(string str)
{
if (str == null || str.Length == 0) return "";
str = Regex.Replace(str, @"\<(?<x>[^\>]*)\>", @"", RegexOptions.IgnoreCase);
str = Regex.Replace(str, @"\[(?<x>[^\]]*)\]", @"", RegexOptions.IgnoreCase);
str = str.Replace(" ", " ");
str = str.Replace(">", ">");
str = str.Replace("<", "<");
str = str.Replace("\n", " ");
str = str.Replace("\r", "");
str = str.Replace("'", "");
return str;
}
wuyq11 2010-08-10
  • 打赏
  • 举报
回复
过滤html Regex.Replace(str,@"<[^> ]+>","");
winner2050 2010-08-10
  • 打赏
  • 举报
回复
#2 的代码是错误的。那个作者的博客那里号称比 1# 贴出的代码性能高,其实是没有区分大小写带来性能提高。

但是带来健壮性问题。
wilensky 2010-08-10
  • 打赏
  • 举报
回复

#region 移除字符串中的html标记
/// <summary>
/// 移除字符串中的html标记
/// </summary>
/// <param name="html">要过滤的字符串</param>
/// <returns>返回的结果</returns>
public static string RemoveHtml(string html)
{
string result = html;

MatchCollection matches = objReg.Matches(html);
foreach (Match match in matches)
{
result = result.Replace(match.Value, string.Empty);
}
return HttpUtility.HtmlEncode(result.Replace("\"", ""));
}

private static readonly Regex objReg = new Regex("<.+?>", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.CultureInvariant);
Peter200694013 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 koudefa 的回复:]
<a hrfe = "" >gafgafgdfgadfgadf </a>gfdagadfgadfgdafgdafgadfgdafgdafgdafgadfgdaf

截取前20个字符如果没有去掉html的标记截取的字符串就会出错
[/Quote]
你说的出错是指什么?
结果不对?


String str = @"<a hrfe = "" >gafgafgdfgadfgadf </a>gfdagadfgadfgdafgdafgadfgdafgdafgdafgadfgdaf";
str = str.Replace("\"","\"\"");

Console.WriteLine(str.Substring(0,20));
sugercgq 2010-08-10
  • 打赏
  • 举报
回复
先过滤html再截取

/// <summary>
/// Html过滤
/// </summary>
/// <param name="pHtml"></param>
/// <returns></returns>
public static string ReplaceHTML(string pHtml)
{
return TestReplace.ReplaceHtmlTag(pHtml).Replace(" ", string.Empty).Replace(" ", string.Empty);
}

public class TestReplace
{
private TestReplace() { }

private static string sNR = "\r\n";
private static string sXiaoYu = "<";
private static string sDaYu = ">";
private static IList<Regex> iList = new List<Regex>();

private static string[] aReplace = new string[]
{
"","","","","","","","\"","&","<",">","","\xa1","\xa2","\xa3","\xa9",""
};

static TestReplace()
{
string[] aPattern = new string[]
{
@"<script.*?</script>",
@"<style.*?</style>",
@"<.*?>",
@"<(.[^>]*)>",
@"([\r\n])[\s]+",
@"-->",
@"<!--.*",
@"&(quot|#34);",
@"&(amp|#38);",
@"&(lt|#60);",
@"&(gt|#62);",
@"&(nbsp|#160);",
@"&(iexcl|#161);",
@"&(cent|#162);",
@"&(pound|#163);",
@"&(copy|#169);",
@"&#(\d+);"
};

for (int i = 0; i < aPattern.Length; i++)
{
iList.Add(new Regex(aPattern[i]));
}
}

/// <summary>
/// 去除HTML标记
/// </summary>
/// <param name="Htmlstring">包括HTML的源码 </param>
/// <returns>已经去除后的文字</returns>
public static string ReplaceHtmlTag(string Htmlstring)
{
Htmlstring = Htmlstring.Replace(sNR, string.Empty);

Regex r;
for (int i = 0; i < iList.Count; i++)
{
r = iList[i];
if (r != null)
Htmlstring = r.Replace(Htmlstring, aReplace[i], -1, 0);
}

Htmlstring = Htmlstring.Replace(sXiaoYu, string.Empty);
Htmlstring = Htmlstring.Replace(sDaYu, string.Empty);
Htmlstring = Htmlstring.Replace(sNR, string.Empty);
return Htmlstring;
}
}



调用 ReplaceHTML('html代码').Substring(0,20);
q107770540 2010-08-10
  • 打赏
  • 举报
回复

public string NoHTML(string Htmlstring) //去除HTML标记
{
//删除脚本
Htmlstring = Regex.Replace(Htmlstring, @" <script[^>]*?>.*? </script>", "", RegexOptions.IgnoreCase);
//删除HTML
Htmlstring = Regex.Replace(Htmlstring, @" <(.[^>]*)>", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @" <!--.*", "", RegexOptions.IgnoreCase);

Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", " <", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);

Htmlstring.Replace(" <", "");
Htmlstring.Replace(">", "");
Htmlstring.Replace("\r\n", "");
Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();

return Htmlstring;
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧