asp.net 使用Response.Filter 過(guò)濾非法詞匯
更新時(shí)間:2010年03月02日 12:48:13 作者:
一般信息發(fā)布網(wǎng)站,論壇等均具有實(shí)現(xiàn)非法詞匯過(guò)濾功能,即當(dāng)用戶錄入非法詞匯時(shí),進(jìn)行替換,使其無(wú)法顯示到頁(yè)面上,針對(duì)此種功能,通常采用的時(shí),在讀取時(shí),在讀到非法詞匯后,進(jìn)行替換。
另一種解決方案是在輸出時(shí)過(guò)濾掉非常詞匯,優(yōu)點(diǎn)是只要寫一次就好了,可以過(guò)濾整站的非法詞匯,缺點(diǎn)是,非法詞匯仍然存入到了數(shù)據(jù)庫(kù)中,呵呵,大家可以有針對(duì)性的選擇,本例用的是后者,起因在于當(dāng)初沒(méi)有做此功能,后來(lái)需要添加,這時(shí)又不想改原來(lái)代碼,所以就想了這個(gè)辦法,主要是采用了HttpResponse.Filter屬性來(lái)處理。具體代碼如下:
首先自定義一個(gè)類,來(lái)作為非法詞匯的過(guò)濾器
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);
//得到非法詞匯列表,這個(gè)可以在數(shù)據(jù)庫(kù)或Web.Config中讀取出來(lái)
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,測(cè)試一下吧!
首先自定義一個(gè)類,來(lái)作為非法詞匯的過(guò)濾器
復(fù)制代碼 代碼如下:
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);
//得到非法詞匯列表,這個(gè)可以在數(shù)據(jù)庫(kù)或Web.Config中讀取出來(lái)
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,測(cè)試一下吧!
您可能感興趣的文章:
- asp.net MVC利用ActionFilterAttribute過(guò)濾關(guān)鍵字的方法
- ASP.NET過(guò)濾類SqlFilter,防止SQL注入
- ASP.NET過(guò)濾HTML標(biāo)簽只保留換行與空格的方法
- ASP.NET過(guò)濾HTML字符串方法總結(jié)
- ASP.NET過(guò)濾器的應(yīng)用方法介紹
- ASP.NET中的URL過(guò)濾實(shí)現(xiàn)代碼
- Asp.net之?dāng)?shù)據(jù)過(guò)濾淺析
- asp.NET 臟字過(guò)濾算法 修改版
- asp.NET 臟字過(guò)濾算法
- asp.net 臟字典過(guò)濾問(wèn)題 用正則表達(dá)式來(lái)過(guò)濾臟數(shù)據(jù)
- asp.net 過(guò)濾圖片標(biāo)簽的正則
- ASP.NET環(huán)境下為網(wǎng)站增加IP過(guò)濾功能
- asp.net 生成靜態(tài)時(shí)的過(guò)濾viewstate的實(shí)現(xiàn)方法
- asp.net MVC利用自定義ModelBinder過(guò)濾關(guān)鍵字的方法(附demo源碼下載)
相關(guān)文章
微信公眾平臺(tái)開(kāi)發(fā)之發(fā)送圖文消息.Net代碼解析
這篇文章主要為大家詳細(xì)解析了微信公眾平臺(tái)開(kāi)發(fā)之發(fā)送圖文消息.Net代碼,感興趣的小伙伴們可以參考一下2016-06-06
asp.net 通用的連接數(shù)據(jù)庫(kù)實(shí)例代碼
數(shù)據(jù)庫(kù)連接是所有程序開(kāi)發(fā)是會(huì)用到的,只是不同程序與數(shù)據(jù)庫(kù)連接的方法不一樣,下面我來(lái)介紹asp.net中數(shù)據(jù)庫(kù)連接代碼,有需要的朋友可以參考一下2013-08-08
ASP.NET?Core6.0-wwwroot文件夾無(wú)法訪問(wèn)解決方法
ASP.NET?Core項(xiàng)目中的wwwroot文件夾被視為Web根文件夾,本文主要介紹了ASP.NET?Core6.0-wwwroot文件夾無(wú)法訪問(wèn)解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09
在 .NET Framework 2.0 中未處理的異常導(dǎo)致基于 ASP.NET 的應(yīng)用程序意外退出
如果在 Microsoft .NET Framework 2.0 上構(gòu)建的基于 Microsoft ASP.NET 的應(yīng)用程序中引發(fā)未處理的異常,該應(yīng)用程序?qū)?huì)意外退出。如果出現(xiàn)這個(gè)問(wèn)題,不會(huì)在應(yīng)用程序日志中記錄了解此問(wèn)題所必需的異常信息。2009-11-11
asp.net實(shí)現(xiàn)三層架構(gòu)的例子
這篇文章主要介紹了asp.net實(shí)現(xiàn)三層架構(gòu)的例子,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-07-07
基于ABP框架實(shí)現(xiàn)數(shù)據(jù)字典開(kāi)發(fā)
本文詳細(xì)講解了基于ABP框架實(shí)現(xiàn)數(shù)據(jù)字典開(kāi)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12

