通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符
通过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*)+", " "); //
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方法找到相应的控件。
通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符相关推荐
- input和textarea中字体样式不同的解决方法
当我们写一个输入框群组时,input和textarea中字体样式会不同,比如下面: 里面输入的字也不一样: 代码在这里: html: <div style="margin: 0 aut ...
- jQuery Mobile中文本输入域input、textarea的data-*选项
全栈工程师开发手册 (作者:栾鹏) jQuery Mobile 所有data-*选项 jQuery Mobile中文本输入域input.textarea的data-*选项 带有 type=" ...
- 移动端input、textarea、div(contenteditable )输入框正则过滤(兼容ios)
目录 一.已知问题及解决方案概述: 1.高度自适应 2.ios无法拼音输入 3.ios过滤符号输入 二.完整代码示例 一.已知问题及解决方案概述: 1.高度自适应 问题:input无法换行:texta ...
- [zt]如何用Javascript获得TextArea中的光标位置
小弟最近在写一个在线编辑器,UBB版的,由于没有使用弹出窗口,所以,在添加代码的时候,只能添在TextArea的最后面,无法在光标之前插入,于是在网上疯狂的找资料,工夫不负有心人,终于被我找到了如何获 ...
- 在一个TextArea中如何限制行数和字符数
在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的JavaScript去限制TextArea的内容为 ...
- 挑战Textarea——把textarea中的HTML写入数据库
这两天忙活着把Textarea 中的数据写入数据库的问题: 在textarea中写入 <variable name="Btn_Check" required="fa ...
- css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数-阿里云开发者社区...
在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的Javascript去限制TextArea的内容为 ...
- css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数
阅读: 1586 评论: 13 作者: 麒麟 发表于 2009-12-21 09:00 原文链接 在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统 ...
- textarea 行数限制_在一个TextArea中如何限制行数和字符数
在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的Javascript去限制TextArea的内容为 ...
最新文章
- 仅剩一周!!CSDN年终大放血!人人有份的大奖你确定不来?
- mysql 四舍五入
- java创建datetime_Java OffsetDateTime ofInstant()用法及代码示例
- 《教你10分钟制作3D网游》视频吐槽
- Xamarin效果第五篇之ScrollView动态滚动效果
- 免安装免配置 还免费的Spark 集群 --Databrickes Spark Clould
- 四川中级职称计算机考试考b级,四川省职称计算机B级考试1卷
- matlab dct稀疏系数,Matlab DCT详解
- java switch 不加 break 继续执行 下一个case(不用匹配条件) 这个设计是为什么
- c语言搬山游戏,C语言实现搬山游戏代码解析
- tableau 倒序都倒了_tableau 网络图与弧线图绘制
- 第二十三模板 1什么是模板
- 线条边框简笔画图片大全_表情包丨表情包简笔画图片大全可爱
- 扶贫计算机考试试题,计算机基础知识试题1.doc
- Mac里的airdrop传输文件
- 微信电脑版关掉截屏快捷键
- 工控变成用c语言还是plc,浅析工控机与PLC的区别
- 技术探秘:华为云瑶光何以定方向
- 软件定义网络SDN(计算机网络-网络层)
- 通过本地客户端连接GoogleCloud的Linux虚拟机
热门文章
- 流感传染(信息学奥赛一本通-T1191)
- matlab fft函数说明_关于“如何使用FFT计算天线阵列方向图”学习资料总结
- STTN、DSTT、FuseFormer总结(它们改进了什么?)
- jQuery基础学习笔记(上)
- <img src=“图片引用失败“ onerror=“自动替换默认图片“> - 代码篇
- phpcmsV9 视频解决方案 - 第三方托管
- phpcmsV9 首页调用全站最新文章(受模型限制)
- HM发卡系统 十分好看的ui
- python timeout_decorator_使用timeout-decorator为python函数任务设置超时时间
- c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析