HOW 2 LEARN ASP.NET
نویسنده : delshad
تاریخ  : ۱۳۸۷/۷/۲۶
امتیاز :
بازدید : 4150
موضوع : فیلتر کلمات به صورت داینامیک (Word Filtering)
توضیحات : در این مقاله روشی جهت ساخت یک فیلتر خودکار توسط Asp.NET آموزش داده خواهد شد.
     

فیلتر کلمات به صورت داینامیک (Word Filtering)

پیش نیاز این مقاله :

1- مبانی و اصول شی گرایی قسمت
2- کار با بانک های اطلاعاتی

شاید تا به حال به این فکر افتاده باشید که برای سایت خود یک مدیریت فیلتر خودکار بسازید ، با این کار شما قادر خواهید بود کلمات مورد نظرتان را در سایت سانسور کنید .
خوشبختانه در Asp.NET این کار  توسط خاصیت Filter  کلاس HttpResponse انجام می شود .
نحوه کار به این صورت هست که ابتدا یک کلاس جدید ایجاد کرده که از کلاس System.IO.Stream  ارث بری کند سپس متد Write این کلاس را Ovveride می کنیم :

 

 using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using Microsoft.VisualBasic;

   

public class WordFilter : System.IO.Stream

{

    private System.IO.Stream Base;

    public WordFilter(System.IO.Stream ResponseStream)

    {

        if ((ResponseStream == null))

        {

            throw new ArgumentNullException("ResponseStream");

        }

        this.Base = ResponseStream;

    }

   

   

   

    public override bool CanRead

    {

        get

        {

   

            return true;

        }

    }

   

    public override bool CanSeek

    {

        get

        {

            return true;

        }

    }

   

    public override bool CanWrite

    {

        get

        {

            return true;

        }

    }

   

    public override long Length

    {

        get

        {

            return 0;

        }

    }

   

    public override long Position

    {

        get

        {

            return 0;

        }

        set

        {

   

        }

    }

   

    public override void Flush()

    {

    }

   

    public override int Read(byte[] buffer, int offset, int count)

    {

        return this.Base.Read(buffer, offset, count);

    }

   

    public override long Seek(long offset, System.IO.SeekOrigin origin)

    {

        return 0;

    }

   

    public override void SetLength(long value)

    {

    }

   

    public override void Write(byte[] buffer, int offset, int count)

    {

        //  Get HTML code

        string HTML = System.Text.Encoding.UTF8.GetString(buffer, offset, count);

        //  Replace the text with something else

            HTML = HTML.Replace("بد", "***");

           //  Send output

        buffer = System.Text.Encoding.UTF8.GetBytes(HTML);

        this.Base.Write(buffer, 0, buffer.Length);

    }

}

 

همانطور که ملاحظه می کنید در هنگام Override کردن متد Write پس از ایجاد و پر کردن متغیر HTML با کمک متد Replace کلمه مورد نظر را جایگزین کردم .

در اینجا فقط یک کلمه جایگزین شد اما شما می توانید لیستی از کلمات تهیه کرده و داخل جدول یک بانک اطلاعاتی ذخیره کنید و  پس از خواندن اطلاعات داخل جدول عمل Replace را انجام دهید

 

    public override void Write(byte[] buffer, int offset, int count)

    {

        //  Get HTML code

        string HTML = System.Text.Encoding.UTF8.GetString(buffer, offset, count);

      

        //  Replace the text with something else

        using (SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString))

        {

            using (SqlCommand Cmd = new SqlCommand("select Word from TBLFilter", Con))

            {

                Con.Close();

                SqlDataReader Dr = Cmd.ExecuteReader();

                while (Dr.Read)

                {

                    HTML = HTML.Replace(Dr["Word"].ToString(), "***");

                }

                Dr.Close();

                Con.Close();

            }

        }

   
        //  Send output

        buffer = System.Text.Encoding.UTF8.GetBytes(HTML);

        this.Base.Write(buffer, 0, buffer.Length);

    }

 

تقریبا کار تمام است کافیست خاصیت Filter کلاس HttpResponse را  مقدار دهی کنید ، این عمل را هم میتوانید در رویداد Page_Load صفحه MasterPage و هم در رویداد Application_BeginRequest فایل Global.asax انجام دهید :

 protected void Application_BeginRequest(object sender, EventArgs e)

    {

        Response.Filter = new WordFilter(Response.Filter);

    }

 


فایل ضمیممه پروژه را از اینجا دانلود کنید .

 


 

 

 
امتیاز بدهید :

نویسنده : Majid systempr96@yahoo.com ۱۳۸۹ چهارم تير
20e
نویسنده : امین ملکوتی admin@amin-malakuti-project.ir ۱۳۸۸ بيست و يکم ارديبهشت
خیلی عالی بود علی جان - واقعا استادی
نویسنده : elham.gh67 ۱۳۸۷ بيست و سوم اسفند
من هیچی نمیفهمم تزه میخواهم بفهمم aspچیه؟

 
نظر بدهید :
لطفا سوالات فنی خود را در تالار گفتگو www.forum.how2learnasp.net مطرح نمایید
نام :  
ایمیل :    
نظرات :
 
Xml rss feed

 

Valid CSS! Atom rss feed
Ali Delshad Official Site