急急!!如何过滤脏话??,听说是用可以记事本写,请问该怎么写。或者其他什么好办法??

解决方案 »

  1.   

    看你要那种方式实现:
    可以用字典表,平时注意收集,比对时候like下
    也可以使用记事本,当然要下载到本地使用比较快,无外乎写个算法,速度要快些,检索就可以了。
      

  2.   

    把属于脏话的字符串写到建好的一个表里
    然后把需过滤的字符串取出来,看是否有脏话,字符串.indexOf("脏话")
    把脏话一条条检查
      

  3.   

    protected string FilterBadWords(string msg)
        {
            //这里读取数据
            //string name1 = "web_config";
            //string sql = "select webnotext from web_config";
            //DataSet ds = mssql.GreatDs(sql, name1);
            ////这里就是过滤了
            //string badwords = ds.Tables[0].Rows[0]["webnotext"].ToString();
    //上边从数据库中读取要过滤的字符
            string badwords = "晕|倒";
            string[] tempstr = badwords.Split('|');
            string finalstr = msg;
            for (int i = 0; i < tempstr.Length; i++)
            {
                finalstr = finalstr.Replace(tempstr[i], new String('*', tempstr[i].Length));
            }
            return finalstr;
        }
      

  4.   

    我以前做过,代码不晓得放哪儿了,
    思路是,先编辑脏话字典,多个脏话用逗号隔开,得到一个字符串比如abc
    比如发布一篇文章,用编辑器写,编辑器ID为tt
    点击发布这篇文章的时候,先把abc以逗号分解用FOR语句循环这篇文章是否有,如果有,就给出提示,就可以了。
      

  5.   

    代码找到了,希望对有帮助
    string likeStr = ""; //like 的SQL变量
                if (key.IndexOf(',') > 0) //判断是否多个关键词
                {
                    string[] keyArr = key.Split(','); //分解多个关键词
                    for (int i = 1; i <= keyArr.Length; i++)
                    {
                        if (i < keyArr.Length)
                            likeStr += "b_gjz like '%" + keyArr[i - 1] + "%' or ";
                        else
                            likeStr += "b_gjz like '%" + keyArr[i - 1] + "%' ";
                    }
                }
                else
                {
                    likeStr = "b_gjz like '%" + key + "%' "; //只有一个关键词
                }
      

  6.   

    首先自定义一个类,来作为非法词汇的过滤器
    [C#] 复制   [保存] 保存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文件中,添加如下代码:
    //这个适合多个页一次过处理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方法
    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);
    }