通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符
2009-01-14 09:10
405 查看
通过IHttpHandlerFactory过滤特殊字符,可以做到和具体项目无关,部署起来也挺简单。
Common.InputText的代码为:
项目中的web.config文件加上这句话:
<httpHandlers>
<!--过滤提交给服务器的文本信息-->
<add verb="*" path="*.aspx"
validate="false" type="JianCaiWeb.Utils.FilterStrFactoryHandler, JianCaiWeb.Utils"/>
</httpHandlers>
代码其实挺好理解,就是在提交数据的时候(requestType=="POST"),通过PageHandlerFactory找到页面实例,将过滤字符串的方法(FilterStrFactoryHandler_PreLoad)加到Page实例的PreLoad事件上,使用这个方法有一个前提,就是Input和Textarea控件必须作为服务器控件运行,如果不这样做的话,就不能通过页面实例的FindControl方法找到相应的控件。
using[/b] System; using[/b] System.Web.UI; using[/b] System.Web; using[/b] System.Text.RegularExpressions; using[/b] System.Collections.Specialized; using[/b] System.Web.UI.WebControls; using[/b] System.Web.UI.HtmlControls; namespace[/b] JianCaiWeb.Utils { public[/b] class[/b] FilterStrFactoryHandler : IHttpHandlerFactory { public[/b] virtual[/b] IHttpHandler GetHandler(HttpContext context, string[/b] requestType, string[/b] url, string[/b] pathTranslated) { //得到编译实例(通过反射) [/b] PageHandlerFactory factory = (PageHandlerFactory) Activator.CreateInstance(typeof[/b](PageHandlerFactory), true[/b]); IHttpHandler handler = factory.GetHandler(context, requestType, url, pathTranslated); //过滤字符串 [/b] if[/b] (requestType == "POST"[/b]) { Page page = handler as[/b] Page; if[/b] (page != null[/b]) page.PreLoad += new[/b] EventHandler(FilterStrFactoryHandler_PreLoad); } //返回 [/b] return[/b] handler; } //过滤TextBox、Input和Textarea中的特殊字符 [/b] void[/b] FilterStrFactoryHandler_PreLoad(object[/b] sender, EventArgs e) { try[/b] { Page page = sender as[/b] Page; NameValueCollection postData = page.Request.Form; foreach[/b] (string[/b] postKey in[/b] postData) { Control ctl = page.FindControl(postKey); if[/b] (ctl as[/b] TextBox != null[/b]) { ((TextBox) ctl).Text = Common.InputText(((TextBox) ctl).Text); continue[/b]; } if[/b] (ctl as[/b] HtmlInputControl != null[/b]) { ((HtmlInputControl) ctl).Value = Common.InputText(((HtmlInputControl) ctl).Value); continue[/b]; } if[/b] (ctl as[/b] HtmlTextArea != null[/b]) { ((HtmlTextArea) ctl).Value = Common.InputText(((HtmlTextArea) ctl).Value); continue[/b]; } } } catch[/b] { } } public[/b] virtual[/b] void[/b] ReleaseHandler(IHttpHandler handler) { } } }
Common.InputText的代码为:
using[/b] System.Text.RegularExpressions; public[/b] class[/b] Common { //字符串过滤 [/b] public[/b] static[/b] string[/b] InputText(string[/b] text) { text = text.Trim(); if[/b] (string[/b].IsNullOrEmpty(text)) return[/b] string[/b].Empty; text = Regex.Replace(text, "[//s]{2,}"[/b], " "[/b]); //two or more spaces [/b] text = Regex.Replace(text, "(<[b|B][r|R]/*>)+|(<[p|P](.|//n)*?>)"[/b], "/n"[/b]); //<br> [/b] text = Regex.Replace(text, "(//s*&[n|N][b|B][s|S][p|P];//s*)+"[/b], " "[/b]); // [/b] text = Regex.Replace(text, "<(.|//n)*?>"[/b], string[/b].Empty); //any other tags [/b] text = text.Replace("'"[/b], "''"[/b]); return[/b] text; } }
项目中的web.config文件加上这句话:
<[/b]httpHandlers[/b]>[/b] <!--过滤提交给服务器的文本信息-->[/b] <[/b]add[/b] verb=[/b]"*"[/b] path=[/b]"*.aspx"[/b] validate=[/b]"false"[/b] type=[/b]"JianCaiWeb.Utils.FilterStrFactoryHandler, JianCaiWeb.Utils"[/b]/>[/b] </[/b]httpHandlers[/b]>[/b]
<httpHandlers>
<!--过滤提交给服务器的文本信息-->
<add verb="*" path="*.aspx"
validate="false" type="JianCaiWeb.Utils.FilterStrFactoryHandler, JianCaiWeb.Utils"/>
</httpHandlers>
代码其实挺好理解,就是在提交数据的时候(requestType=="POST"),通过PageHandlerFactory找到页面实例,将过滤字符串的方法(FilterStrFactoryHandler_PreLoad)加到Page实例的PreLoad事件上,使用这个方法有一个前提,就是Input和Textarea控件必须作为服务器控件运行,如果不这样做的话,就不能通过页面实例的FindControl方法找到相应的控件。
相关文章推荐
- 通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符
- 通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符
- 通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符
- 通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符
- 通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊
- 通过过滤掉字符和特殊字母来防止SQL注入攻击
- 关于input自动过滤特殊字符的简单方法
- 关于input自动过滤特殊字符的简单方法
- bootstrap fileinput.js扩展-增加对文件名特殊字符过滤
- php特殊字符过滤,html标签处理
- 过滤和反过滤特殊字符
- 过滤特殊字符
- C# Url 过滤特殊字符
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- 输入框特殊字符过滤
- 过滤特殊字符
- Atlas学习手记(17):使用FilteredTextBox过滤字符
- iOS如何过滤掉文本中特殊字符
- input\textarea剩余字符数提示(jQuery)
- NSString过滤特殊字符