本文章来源:http://blog.csdn.net/hhxxcj/archive/2009/01/20/3844164.aspx

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

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

Code
using System;
using System.Text;
using System.IO;
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文件中,添加如下代码:

Code
//这个适合多个页一次过处理
 public void Application_BeginRequest() { 
    string path = HttpContext.Current.Request.Path.ToLower(); 
    string[] paths = new string[] { "/aa/","/bb/" }; 
    foreach (string item in paths) 
    { 
         if (path.StartsWith(item)) 
         { 
               Response.Filter = new ResponseFilter(Response.Filter); 
               break; 
          } 
    }
 }

或者重写某页的Render方法

Code
protected override void Render(HtmlTextWriter writer) 

      StringWriter strWriter = new StringWriter(); 
      base.Render(new HtmlTextWriter(strWriter)); 
      string html = strWriter.ToString(); 
      html = Util.ReplaceInvalidKeyword(html); writer.Write(html); 
}

转载于:https://www.cnblogs.com/rangeliu/archive/2009/01/24/1380630.html

[转载]使用Response.Filter过滤非法词汇相关推荐

  1. 使用Response.Filter过滤非法词汇

    一般信息发布网站,论坛等均具有实现非法词汇过滤功能,即当用户录入非法词汇时,进行替换,使其无法显示到页面上,针对此种功能,通常采用的时,在读取时,在读到非法词汇后,进行替换.这样做的好处是不用将非法词 ...

  2. Filter过滤词汇

    Filter过滤词汇(增强返回) 1.首先Filter使用注解设置拦截路径,将工程下的所有资源请求都拦下来 2.登录Servlet,在URL上传送数据,并在Servlet上的Post或是Get上对传送 ...

  3. dedeCMS如何进行关键词过滤替换和屏蔽非法词汇?

    dedeCMS系统模板安装完毕之后,如何进行非法词汇的屏蔽,以及关键词过滤替换呢? 一.所需修改文件路径: C:\wamp64\www\install\config.cache.inc.php 二.对 ...

  4. 过滤器-过滤敏感词汇

    首先要准备好敏感词库,敏感词汇的格式如下: |1 买枪|2 四大舰队|3 其中1代表禁用词:禁用词将禁止提交,2代表审核次:将以高亮字体显示,3代表过滤词:将替换为****, 过滤器代码实现如下: p ...

  5. PHP 一个可以过滤非法脚本的函数

    这里提供一个过滤非法脚本的函数: function RemoveXSS($val) {     // remove all non-printable characters. CR(0a) and L ...

  6. 验证多个Filter过滤一个资源时执行顺序

    当有多个Filter过滤一个资源时,执行顺序到底是怎样? 如下测试: 定义两个Filter,FirstFilter,SecondFilter,它们过滤同一个index.jsp页面,并且SecondFi ...

  7. springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径

    springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径,没有配置/*,输入任何路径都能进过滤器 2019年04月25日 12:51:33 peigui.hu ...

  8. TDI Filter 过滤驱动

    By Fanxiushu  2013, 引用和转载请注明原作者 为了让大家有兴趣阅读下去, 举个正在使用的可能大家都比较熟悉的例子: 360 的安全卫士里,有个流量防火墙的功能, 它可以监视每个进程的 ...

  9. django 模型类的常见字段约束,以及filter 过滤和查询

    null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...

  10. Android利用Filter过滤数据

    MainActivity如下: package cc.testfilterable;import java.util.ArrayList; import java.util.HashMap; impo ...

最新文章

  1. 英文Ubuntu安装中文包(locale)的方法
  2. Cannot open include file: jni.h: No such file or directory解决方法
  3. 清新浪漫风情人节海报PSD分层模板!
  4. java分布式_分布式锁的四种JAVA实现方式
  5. PoolTogether本周Loot Box奖金组合中新增加入ESSAY代币
  6. input输入框只能输入正整数
  7. Linux进程间通信IPC学习笔记之同步一(线程、互斥锁和条件变量)
  8. java 数组随机抽取_Java利用数组随机抽取幸运观众
  9. Ubuntu14.04上安装CSI tool
  10. 用gulp-imageisux智图api压缩图片
  11. 美丽的花蝴蝶 动人的海豚音 天后[Mariah Carey玛丽亚·凯莉]全集
  12. bzoj4568-幸运数字
  13. Fedora14 基于Qt的UDP传输文字聊天小软件实现 (Qt查询本地Ip、Qt本地时间显示、传输中文汉字实现、Qt的textedit自动滚屏实现、给QPushButton设键盘快捷实现)---续上
  14. [论文阅读]Road Mapping and Localization using Sparse Semantic Visual Features
  15. Wallpaper 双屏单独显示壁纸
  16. 简洁版Featured Category/Shop by Category模块
  17. 【疑难杂症】JavaScript执行期上下文
  18. android弹窗使用总结,高仿QQ空间操作弹窗
  19. c语言程序设计试题汇编第三版勘误,《C语言程序设计》及《习题集》(姚合生等)勘误表.docx...
  20. STM32F103C8T6驱动SYN6288语音模块(暂时做到能播放连续语音,其他诸如背景音乐的功能还没做)

热门文章

  1. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_15-页面静态化-模板管理-模板管理业务流程...
  2. Centos 7 Mysql 最大连接数超了问题解决
  3. CPU Usage (C#) 测试
  4. UIImagePickerController 获取相片视频
  5. 网摘Android调用WebService
  6. switch_case,,||,条件操作符和逗号操作符,循环语句
  7. Android Studio 安装说明
  8. WPF UI布局之概述
  9. 有用的linux命令笔记
  10. Firefox控制台日志转入文件