zoukankan      html  css  js  c++  java
  • 通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符

    通过IHttpHandlerFactory过滤特殊字符,可以做到和具体项目无关,部署起来也挺简单。
    using System;
    using System.IO;
    using System.Web.UI;
    using System.Web;
    using System.Configuration;
    using System.Text.RegularExpressions;
    using System.Web.Compilation;
    using System.Reflection;
    using System.Collections.Specialized;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    namespace JianCaiWeb.Utils
    {
        
    public class FilterStrFactoryHandler : IHttpHandlerFactory
        
    {
            
    public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
            
    {
                
    //得到编译实例(通过反射)
                PageHandlerFactory factory = (PageHandlerFactory)Activator.CreateInstance(typeof(PageHandlerFactory),true);
                IHttpHandler handler 
    = factory.GetHandler(context, requestType, url, pathTranslated);
                
    //过滤字符串
                if (requestType == "POST")
                
    {
                    Page page 
    = handler as Page;
                    
    if (page != null)
                        page.PreLoad 
    += new EventHandler(FilterStrFactoryHandler_PreLoad);
                }


                
    //返回
                return handler;
            }

            
    //过滤TextBox、Input和Textarea中的特殊字符
            void FilterStrFactoryHandler_PreLoad(object sender, EventArgs e)
            
    {
                
    try
                
    {
                    Page page 
    = sender as Page;
                    NameValueCollection postData 
    = page.Request.Form;
                    
    foreach (string postKey in postData)
                    
    {
                        Control ctl 
    = page.FindControl(postKey);
                        
    if (ctl as TextBox != null)
                        
    {
                            ((TextBox)ctl).Text 
    = Common.InputText(((TextBox)ctl).Text);
                            
    continue;
                        }

                        
    if (ctl as HtmlInputControl != null)
                        
    {
                            ((HtmlInputControl)ctl).Value 
    = Common.InputText(((HtmlInputControl)ctl).Value);
                            
    continue;
                        }

                        
    if (ctl as HtmlTextArea != null)
                        
    {
                            ((HtmlTextArea)ctl).Value 
    = Common.InputText(((HtmlTextArea)ctl).Value);
                            
    continue;
                        }

                    }

                }

                
    catch { }
            }


            
    public virtual void ReleaseHandler(IHttpHandler handler)
            
    {
            }

        }

    }


    Common.InputText的代码为:
            //字符串过滤
            public static string InputText(string text)
            
    {
                text 
    = text.Trim();
                
    if (string.IsNullOrEmpty(text))
                    
    return string.Empty;
                text 
    = Regex.Replace(text, "[\\s]{2,}"" ");    //two or more spaces
                text = Regex.Replace(text, "(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?>)""\n");    //<br>
                text = Regex.Replace(text, "(\\s*&[n|N][b|B][s|S][p|P];\\s*)+"" ");    //&nbsp;
                text = Regex.Replace(text, "<(.|\\n)*?>"string.Empty);    //any other tags
                text = text.Replace("'""''");
                
    return text;
            }
    项目中的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方法找到相应的控件。
    有不清楚的朋友给我留言。
  • 相关阅读:
    k64 datasheet学习笔记26--Oscillator (OSC)
    k64 datasheet学习笔记22---Direct Memory Access Controller (eDMA)
    k64 datasheet学习笔记21--Direct Memory Access Multiplexer (DMAMUX)
    System.getProperty()获取系统的配置信息
    Zoomit的用法总结
    .bat文件调用java类的main方法
    电脑快捷键总结
    验证java引用的小例子
    java随机数
    java调用删除文件的方法删除文件,却删除不干净
  • 原文地址:https://www.cnblogs.com/fengfeng/p/1140330.html
Copyright © 2011-2022 走看看