7赞
868
当前位置:  开发笔记 > 前端 > 正文

asp.net使用Response.Filter过滤非法词汇

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

public void Application_BeginRequest(){
Response.Filter = new ResponseFilter(Response.Filter);

}

OK,测试一下吧!
推荐阅读
  • yii1.0隐藏index.php的方法:首先打开“httpd.conf”文件;然后开启“mod_rewrite.so”;接着将相对应目录的“AllowOverride”改为ALL;最后在index同级目录下新建htaccess即可。 ... [详细]
  • 今天swoole栏目带大家介绍SwooleHTTP的内容,有需要的朋友可以看看,了解了解,有问题欢迎留言讨论。 ... [详细]
  • 下面由thinkphp教程栏目给大家介绍thinkphpajaxfileupload异步上传图片方法,希望对需要的朋友有所帮助! ... [详细]
  • 下面由sublime教程栏目给大家介绍sublime常用插件,希望对需要的朋友有所帮助!1、​ChineseLocalization汉化插件,支持无缝切换中文、日语、英文;2、​ConvertToUTF8增加GBK编码,以及GBK. ... [详细]
  • 下面由phpstorm教程栏目给大家介绍解决phpStorm使用vue提示"Attributev-xxxisnotallowedhere"的方法,希望对需要的朋友有所帮助! ... [详细]
  • PHP的代码提示、补全、跳转定义、格式化插件,功能强大,无需配置;优秀,必装。 ... [详细]
  • vscode运行vue项目时eslint报错的解决方法:1、安装eslint-plugin-vue插件;2、修改项目根路径下文件eslint.js;3、添加eslint和vetur插件;4、修改vscode首选项配置;5、重启vscode。 ... [详细]
  • 使用vscode打开已有的vue项目的方法是:1、首先安装【vetur】和【eslint】插件;2、接着点击【文件】、【打开文件夹】、【导入项目】;3、然后在控制台输入【npminstall】命令添加包依赖;4、最后运行项目即可。 ... [详细]
  • 在vscode上打开html页面的方法是:1、首先打开插件管理工具,搜索【openinbrowser】;2、然后安装插件;3、最后打开html文件,右键选择【openindefaultbrowser】即可。 ... [详细]
  • vscode创建HTML文件的方法是:1、首先点击【openfolder】;2、然后选择目标文件夹,新建一个扩展名为html的文件;3、最后输入!,按tab键即可完成创建。 ... [详细]
devbox
张程Louis
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有 京ICP备19059560号-4