通过IHttpHandlerFactory过滤特殊字符,可以做到和具体项目无关,部署起来也挺简单。

using System;
using System.Web.UI;
using System.Web;
using System.Text.RegularExpressions;
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的代码为:

using System.Text.RegularExpressions;
public class Common
{//字符串过滤
    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>
<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中的特殊字符相关推荐

  1. input和textarea中字体样式不同的解决方法

    当我们写一个输入框群组时,input和textarea中字体样式会不同,比如下面: 里面输入的字也不一样: 代码在这里: html: <div style="margin: 0 aut ...

  2. jQuery Mobile中文本输入域input、textarea的data-*选项

    全栈工程师开发手册 (作者:栾鹏) jQuery Mobile 所有data-*选项 jQuery Mobile中文本输入域input.textarea的data-*选项 带有 type=" ...

  3. 移动端input、textarea、div(contenteditable )输入框正则过滤(兼容ios)

    目录 一.已知问题及解决方案概述: 1.高度自适应 2.ios无法拼音输入 3.ios过滤符号输入 二.完整代码示例 一.已知问题及解决方案概述: 1.高度自适应 问题:input无法换行:texta ...

  4. [zt]如何用Javascript获得TextArea中的光标位置

    小弟最近在写一个在线编辑器,UBB版的,由于没有使用弹出窗口,所以,在添加代码的时候,只能添在TextArea的最后面,无法在光标之前插入,于是在网上疯狂的找资料,工夫不负有心人,终于被我找到了如何获 ...

  5. 在一个TextArea中如何限制行数和字符数

    在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的JavaScript去限制TextArea的内容为 ...

  6. 挑战Textarea——把textarea中的HTML写入数据库

    这两天忙活着把Textarea 中的数据写入数据库的问题: 在textarea中写入 <variable name="Btn_Check" required="fa ...

  7. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数-阿里云开发者社区...

    在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的Javascript去限制TextArea的内容为 ...

  8. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数

    阅读: 1586 评论: 13 作者: 麒麟 发表于 2009-12-21 09:00 原文链接 在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统 ...

  9. textarea 行数限制_在一个TextArea中如何限制行数和字符数

    在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的Javascript去限制TextArea的内容为 ...

最新文章

  1. 仅剩一周!!CSDN年终大放血!人人有份的大奖你确定不来?
  2. mysql 四舍五入
  3. java创建datetime_Java OffsetDateTime ofInstant()用法及代码示例
  4. 《教你10分钟制作3D网游》视频吐槽
  5. Xamarin效果第五篇之ScrollView动态滚动效果
  6. 免安装免配置 还免费的Spark 集群 --Databrickes Spark Clould
  7. 四川中级职称计算机考试考b级,四川省职称计算机B级考试1卷
  8. matlab dct稀疏系数,Matlab DCT详解
  9. java switch 不加 break 继续执行 下一个case(不用匹配条件) 这个设计是为什么
  10. c语言搬山游戏,C语言实现搬山游戏代码解析
  11. tableau 倒序都倒了_tableau 网络图与弧线图绘制
  12. 第二十三模板 1什么是模板
  13. 线条边框简笔画图片大全_表情包丨表情包简笔画图片大全可爱
  14. 扶贫计算机考试试题,计算机基础知识试题1.doc
  15. Mac里的airdrop传输文件
  16. 微信电脑版关掉截屏快捷键
  17. 工控变成用c语言还是plc,浅析工控机与PLC的区别
  18. 技术探秘:华为云瑶光何以定方向
  19. 软件定义网络SDN(计算机网络-网络层)
  20. 通过本地客户端连接GoogleCloud的Linux虚拟机

热门文章

  1. 流感传染(信息学奥赛一本通-T1191)
  2. matlab fft函数说明_关于“如何使用FFT计算天线阵列方向图”学习资料总结
  3. STTN、DSTT、FuseFormer总结(它们改进了什么?)
  4. jQuery基础学习笔记(上)
  5. <img src=“图片引用失败“ onerror=“自动替换默认图片“> - 代码篇
  6. phpcmsV9 视频解决方案 - 第三方托管
  7. phpcmsV9 首页调用全站最新文章(受模型限制)
  8. HM发卡系统 十分好看的ui
  9. python timeout_decorator_使用timeout-decorator为python函数任务设置超时时间
  10. c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析