去除字符串中的Html标记,但要求保留类似“<阿斯顿>”这样的字符

land_L 2014-09-04 10:51:57
  public static String ToTxt(String Htmlstring)
{
//删除脚本
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;
}

在网上找到这样的代码段,但是会把所有带“<>”的都给替换掉,自己对正则不是很懂,请问可否帮忙改下。。
...全文
146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
effun 2014-09-04
  • 打赏
  • 举报
回复
用正则表达式虽然可以实现,但并不一定十分准确,建议用专用的HTML解析器。Html Agility Pack比较好用,可以试试。
land_L 2014-09-04
  • 打赏
  • 举报
回复
引用 5 楼 zhengyuelu 的回复:
用正则判断其中的内容如果是中文则不过滤。
貌似可行,可以具体点不?
iMax_Wang 2014-09-04
  • 打赏
  • 举报
回复
用正则判断其中的内容如果是中文则不过滤。
land_L 2014-09-04
  • 打赏
  • 举报
回复
引用 3 楼 gxingmin 的回复:
string strTemp=str.replace("<阿斯顿>","[阿斯顿]"); strTemp = ToTxt(strTemp); strTemp = strTemp.replace("[阿斯顿]","<阿斯顿>");
可能我没表述清楚,<阿斯顿> 只是个例子,可能有其他的<啊啊啊>,<呃呃呃>等等,具体有多少种,无法确定 所以显然这样做不行吧..
gxingmin 2014-09-04
  • 打赏
  • 举报
回复
string strTemp=str.replace("<阿斯顿>","[阿斯顿]"); strTemp = ToTxt(strTemp); strTemp = strTemp.replace("[阿斯顿]","<阿斯顿>");
land_L 2014-09-04
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
笨方法,先把<阿斯顿>替换成[阿斯顿],再调用你上面的代码,最后再把[阿斯顿]替换成<阿斯顿>
那怎么判定是<阿斯顿>呢?。。。话说回来,要是有判定<阿斯顿>的办法也就不用这么麻烦了吧。。。?
gxingmin 2014-09-04
  • 打赏
  • 举报
回复
笨方法,先把<阿斯顿>替换成[阿斯顿],再调用你上面的代码,最后再把[阿斯顿]替换成<阿斯顿>

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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