天下第二博

Tian Xia The Second BO
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

本文介绍如何使用正则表达式过滤html标签的属性(style,class),和html标签如a,div和iframe,objectg,script.

1.使用正则表达式过滤标签样式:style,class.

比如<p style="width:100px">或<p class="myclass"></p>

可使用下面的代码:

  1. private string FilterHtml(string element,string content)  
  2. {  
  3.     string pattern = element + "\\s?=\\s?(['\"][^'\"]*?['\"]|[^'\"]\\S*)";             
  4.     try  
  5.     {  
  6.         Regex reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);  
  7.         content = reg.Replace(content, "");  
  8.     }  
  9.     catch  
  10.     { }  
  11.     return content;  
  12.  

这个表达式具有普遍意义:可以过滤html的属性。如table的width等

2.使用正则表达式过滤html标签

  1. private string FilterHtml(string element,string content)  
  2. {  
  3.     string pattern = "<" + element + "[^>]*>|</" + element + ">";            
  4.     try  
  5.     {  
  6.         Regex reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);  
  7.         content = reg.Replace(content, "");  
  8.     }  
  9.     catch  
  10.     { }  
  11.     return content;  
  12. }  

可过滤如:<div>和</div>等。

上面的代码对提取文章摘要时很有用处。文章摘要通常先过滤html标签,在提取一段文字的。

3.使用正则表达是过滤object,script,iframe

  1. private string FilterHtml(string element,string content)  
  2. {  
  3.     string pattern = "<(?<tag>" + element + @")[^>]*>[\s\S]*</\k<tag>>";  
  4.     try  
  5.     {  
  6.         Regex reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);  
  7.         content = reg.Replace(content, "");  
  8.     }  
  9.     catch  
  10.     { }  
  11.     return content;  
  12. }  

在html中通过script,iframe挂马令人痛恨。使用上面的代码可以过滤这些害人虫。