使用Response.Filter过滤非法词汇

一般信息发布网站,论坛等均具有实现非法词汇过滤功能,即当用户录入非法词汇时,进行替换,使 其无法显示到页面上,针对此种功能,通常采用的时,在读取时,在读到非法词汇后,进行替换。另一种 解决方案是在输出时过滤掉非常词汇,优点是只要写一次就好了,可以过滤整站的非法词汇,缺点是,非 法词汇仍然存入到了数据库中,呵呵,大家可以有针对性的选择,本例用的是后者,起因在于当初没有做 此功能,后来需要添加,这时又不想改原来代码,所以就想了这个办法,主要是采用了 HttpResponse.Filter属性来处理。具体代码如下:

首先自定义一个类,来作为非法词汇的过滤器

1 public class ResponseFilter:Stream
2 {
3   #region  properties
4
5   Stream responseStream;
6   long position;
7    StringBuilder html = new StringBuilder();
8
9   #endregion
10
11    #region constructor
12
13   public ResponseFilter(Stream inputStream)
14    {
15
16     responseStream = inputStream;
17
18   }
19
20    #endregion
21
22   #region implemented abstract members
23
24    public override bool CanRead
25   {
26     get { return true; }
27    }
28
29   public override bool CanSeek
30   {
31     get {  return true; }
32   }
33
34   public override bool CanWrite
35    {
36     get { return true; }
37   }
38
39   public override  void Close()
40   {
41     responseStream.Close();
42   }
43
44    public override void Flush()
45   {
46     responseStream.Flush ();
47   }
48
49   public override long Length
50   {
51      get { return 0; }
52   }
53
54   public override long Position
55    {
56     get { return position; }
57     set { position =  value; }
58   }
59
60   public override long Seek(long offset,  System.IO.SeekOrigin direction)
61   {
62     return responseStream.Seek (offset, direction);
63   }
64
65   public override void SetLength(long  length)
66   {
67     responseStream.SetLength(length);
68   }
69
70   public override int Read(byte[] buffer, int offset, int count)
71   {
72     return responseStream.Read(buffer, offset, count);
73    }
74
75   #endregion
76
77   #region write method
78
79    public override void Write(byte[] buffer, int offset, int count)
80    {
81
82     string sBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer,  offset, count);
83
84  //得到非法词汇列表,这个可以在数据库或Web.Config中读取出来
85      string pattern = @"(非法词汇1|非法词汇2|非法词汇3)";
86
87
88      string[] s = pattern.Split(new string[] { "|" },  StringSplitOptions.RemoveEmptyEntries);
89
90     foreach (string s1 in s)
91     {
92       sBuffer = sBuffer.Replace(s1, "**");
93      }
94
95
96     byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes (sBuffer);
97     responseStream.Write(data, 0, data.Length);
98
99   }
100
101   #endregion
102
103
104 }

然后再Global.asax文件中,添加如下代码:

1  public void Application_BeginRequest()
2   {
3      Response.Filter = new ResponseFilter(Response.Filter);
4
5   }

OK,测试一下吧!

时间: 2024-10-28 15:05:02

使用Response.Filter过滤非法词汇的相关文章

asp.net 使用Response.Filter 过滤非法词汇_实用技巧

另一种解决方案是在输出时过滤掉非常词汇,优点是只要写一次就好了,可以过滤整站的非法词汇,缺点是,非法词汇仍然存入到了数据库中,呵呵,大家可以有针对性的选择,本例用的是后者,起因在于当初没有做此功能,后来需要添加,这时又不想改原来代码,所以就想了这个办法,主要是采用了HttpResponse.Filter属性来处理.具体代码如下: 首先自定义一个类,来作为非法词汇的过滤器 复制代码 代码如下: public class ResponseFilter:Stream { #region propert

三种过滤非法的SQL字符 非法sql注入字符

'************************************************** '函数名:R '参 数:strChar-----要过滤的字符 '返回值:过滤后的字符 '************************************************** Public Function R(strChar) If strChar = "" Or IsNull(strChar) Then R = "":Exit Function

filter过滤输出的问题

问题描述 filter过滤输出的问题 import java.io.CharArrayWriter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; public class HttpCharacterResponseWrapper

spring3mvc里面怎么过滤非法关键字?这个拦截器怎么写和配置?

问题描述 拦截器:publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecto)throwsException{//Controller访问前进行拦截,允许通过返回true,否则返回false......此处怎么修改用户提交的值,然后在action里得到的值是被修改后的值,达到过滤非法字符的作用.}action:publicModelAndViewtest(Stringmsg){msg的值

c# filter 过滤文件-Filter过滤文件格式失败,菜鸟求解

问题描述 Filter过滤文件格式失败,菜鸟求解 fs.Filter = ""文本文件(*.txt)|*.txt|S1P文件(*.S1P)|*.S1P""我这样写为什么触发不了事件啊?fsFaild.Filter = ""*.txt"";这样就能过滤txt的文件,并触发事件

MFC语言的stl中如何实现通过函数过滤非法的浮点数的输入

问题描述 MFC语言的stl中如何实现通过函数过滤非法的浮点数的输入 MFC语言的stl中如何实现通过函数过滤非法的浮点数的输入,具体的函数代码怎么调用呢? 解决方案 这个和stl没有什么关系,你可以通过遍历vector或者set,找出不符合规则的数据,并且删除.

asp下过滤非法的SQL字符的函数代码_应用技巧

复制代码 代码如下: '************************************************** '函数名:R '作 用:过滤非法的SQL字符 '参 数:strChar-----要过滤的字符 '返回值:过滤后的字符 '************************************************** Public Function R(strChar) If strChar = "" Or IsNull(strChar) Then R =

请教一个问题,获取到一个DataSet,使用Filter过滤其中的数据

问题描述 获取到一个DataSet,使用Filter过滤其中的数据,但是Filter中有单引号,结果我下面的语句就不能调试通过,请大家帮忙解决.stringfilter=string.Format("Label='{0}'",positionName);DataRow[]rows=DataSet1.Select(filter); 解决方案 解决方案二:DataSet不知道怎么过滤的:DataTable过滤可以这样写:DataRow[]rows=DataTable1.Select(&qu

javascipt:filter过滤介绍及使用_javascript技巧

javascipt : filter  过滤 var List = sizes.filter(function (size) { return size.id == 12; }); sizes = [ {id : 10,,stock:130},{id : 11,stock:120},{id : 12,stock:100} ] filter是new一个新的array,然后给他过滤后的对象,最后var list 起来 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关