asp.net 使用Response.Filter 過濾非法詞匯
更新時間:2010年03月02日 12:48:13 作者:
一般信息發(fā)布網(wǎng)站,論壇等均具有實現(xiàn)非法詞匯過濾功能,即當用戶錄入非法詞匯時,進行替換,使其無法顯示到頁面上,針對此種功能,通常采用的時,在讀取時,在讀到非法詞匯后,進行替換。
另一種解決方案是在輸出時過濾掉非常詞匯,優(yōu)點是只要寫一次就好了,可以過濾整站的非法詞匯,缺點是,非法詞匯仍然存入到了數(shù)據(jù)庫中,呵呵,大家可以有針對性的選擇,本例用的是后者,起因在于當初沒有做此功能,后來需要添加,這時又不想改原來代碼,所以就想了這個辦法,主要是采用了HttpResponse.Filter屬性來處理。具體代碼如下:
首先自定義一個類,來作為非法詞匯的過濾器
public class ResponseFilter:Stream
{
#region properties
Stream responseStream;
long position;
StringBuilder html = new StringBuilder();
#endregion
#region constructor
public ResponseFilter(Stream inputStream)
{
responseStream = inputStream;
}
#endregion
#region implemented abstract members
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override void Close()
{
responseStream.Close();
}
public override void Flush()
{
responseStream.Flush();
}
public override long Length
{
get { return 0; }
}
public override long Position
{
get { return position; }
set { position = value; }
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
return responseStream.Seek(offset, direction);
}
public override void SetLength(long length)
{
responseStream.SetLength(length);
}
public override int Read(byte[] buffer, int offset, int count)
{
return responseStream.Read(buffer, offset, count);
}
#endregion
#region write method
public override void Write(byte[] buffer, int offset, int count)
{
string sBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
//得到非法詞匯列表,這個可以在數(shù)據(jù)庫或Web.Config中讀取出來
string pattern = @"(非法詞匯1|非法詞匯2|非法詞匯3)";
string[] s = pattern.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s1 in s)
{
sBuffer = sBuffer.Replace(s1, "**");
}
byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(sBuffer);
responseStream.Write(data, 0, data.Length);
}
#endregion
}
然后再Global.asax文件中,添加如下代碼:
[code]
public void Application_BeginRequest(){
Response.Filter = new ResponseFilter(Response.Filter);
}
OK,測試一下吧!
首先自定義一個類,來作為非法詞匯的過濾器
復制代碼 代碼如下:
public class ResponseFilter:Stream
{
#region properties
Stream responseStream;
long position;
StringBuilder html = new StringBuilder();
#endregion
#region constructor
public ResponseFilter(Stream inputStream)
{
responseStream = inputStream;
}
#endregion
#region implemented abstract members
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override void Close()
{
responseStream.Close();
}
public override void Flush()
{
responseStream.Flush();
}
public override long Length
{
get { return 0; }
}
public override long Position
{
get { return position; }
set { position = value; }
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
return responseStream.Seek(offset, direction);
}
public override void SetLength(long length)
{
responseStream.SetLength(length);
}
public override int Read(byte[] buffer, int offset, int count)
{
return responseStream.Read(buffer, offset, count);
}
#endregion
#region write method
public override void Write(byte[] buffer, int offset, int count)
{
string sBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
//得到非法詞匯列表,這個可以在數(shù)據(jù)庫或Web.Config中讀取出來
string pattern = @"(非法詞匯1|非法詞匯2|非法詞匯3)";
string[] s = pattern.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s1 in s)
{
sBuffer = sBuffer.Replace(s1, "**");
}
byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(sBuffer);
responseStream.Write(data, 0, data.Length);
}
#endregion
}
然后再Global.asax文件中,添加如下代碼:
[code]
public void Application_BeginRequest(){
Response.Filter = new ResponseFilter(Response.Filter);
}
OK,測試一下吧!
您可能感興趣的文章:
- asp.net MVC利用ActionFilterAttribute過濾關鍵字的方法
- ASP.NET過濾類SqlFilter,防止SQL注入
- ASP.NET過濾HTML標簽只保留換行與空格的方法
- ASP.NET過濾HTML字符串方法總結(jié)
- ASP.NET過濾器的應用方法介紹
- ASP.NET中的URL過濾實現(xiàn)代碼
- Asp.net之數(shù)據(jù)過濾淺析
- asp.NET 臟字過濾算法 修改版
- asp.NET 臟字過濾算法
- asp.net 臟字典過濾問題 用正則表達式來過濾臟數(shù)據(jù)
- asp.net 過濾圖片標簽的正則
- ASP.NET環(huán)境下為網(wǎng)站增加IP過濾功能
- asp.net 生成靜態(tài)時的過濾viewstate的實現(xiàn)方法
- asp.net MVC利用自定義ModelBinder過濾關鍵字的方法(附demo源碼下載)
相關文章
Asp .net 調(diào)用帶參數(shù)的存儲過程
本文主要介紹了Asp .net 調(diào)用帶參數(shù)的存儲過程的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03使用DataGrid中擴展ItemRenderer和HeaderRenderer進行操作
這兩天在用Flex DataGrid做點東西,走了不少彎路,現(xiàn)將心得分享一下。2009-02-02asp.net(c#)下各種進制間的輕松轉(zhuǎn)換(2進制、8進制、10進制、16進制)
在.NET Framework中,System.Convert類中提供了較為全面的各種類型、數(shù)值之間的轉(zhuǎn)換功能。2010-10-10淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié)
這篇文章主要介紹了淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié),以便在實際的開發(fā)中選用合適的控件進行數(shù)據(jù)綁定,以提高開發(fā)效率。2016-12-12asp.net下出現(xiàn)其中的組件“訪問被拒絕”的解決方法
asp.net下出現(xiàn)其中的組件“訪問被拒絕”的解決方法...2007-04-04