因为编辑器可以输入任意字符。包括脚本 以及 iframe 之类 或者 在 img 标签里面 输入一些非法的脚本 等等情况。请问如来来过滤掉这些内容。 网上找了一些过滤方法 感觉会把原本输入的一些内容东西给过滤掉了 显示的时候就乱掉了。代码如下。
/// <summary> /// 过滤 html 危险字符 /// </summary> /// <param name="html">内容</param> /// <returns></returns> public static string FilterHTML(string html) { if (html == null) return ""; System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" on[\s\S]*=", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"<iframe[\s\S]+</iframe *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"<frameset[\s\S]+</frameset *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex6 = new System.Text.RegularExpressions.Regex(@"\<img[^\>]+\>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex7 = new System.Text.RegularExpressions.Regex(@"</p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex8 = new System.Text.RegularExpressions.Regex(@"<p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex9 = new System.Text.RegularExpressions.Regex(@"<[^>]*>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); html = regex1.Replace(html, ""); //过滤<script></script>标记 html = regex2.Replace(html, ""); //过滤href=javascript: (<A>) 属性 html = regex3.Replace(html, " _disibledevent="); //过滤其它控件的on...事件 html = regex4.Replace(html, ""); //过滤iframe html = regex5.Replace(html, ""); //过滤frameset html = regex6.Replace(html, ""); //过滤frameset html = regex7.Replace(html, ""); //过滤frameset html = regex8.Replace(html, ""); //过滤frameset html = regex9.Replace(html, ""); html = html.Replace(" ", ""); html = html.Replace("</strong>", ""); html = html.Replace("<strong>", ""); return html; }
对HTML内容,可以用HTML转义符进行标签符号替换。
Content=Regex.Replace(Content,"<","<"); //过滤HTML代码
Content=Regex.Replace(Content,">",">");
Content=Regex.Replace(Content,"\r","<BR>"); //回车
Content=Regex.Replace(Content," "," "); //空格
Content=Regex.Replace(Content,"\t"," ");//水平 Tab
HTML 过滤直接 删除或者替换带 <>的字符串就行了
或者用1L的方法
我擦……
Server.HtmlEncode(“输入的危险符号”)
早在Asp.net 2.0的时候,这个方法都有了吧。怎么这么多人不知道。
HttpUnity.HtmlEncode(“这个方法也管用”)。
Asp.net框架自带这些 过滤危险字符的方法。怎么这么多人不知道。
还要自己写方法来判断
HtmlEncode方法 可以把对应的html代码编码后进行显示。假如显示编辑器里面编写的文字 要加粗。并且颜色变成红色,还有就是分成不同的段落。按你说的 是不是 把p标签那些都按原样显示出来了。用编辑器 就是为了方便用户可以定义一些 显示样式效果。
<script>while(1==1){alert('这个站长是个笨蛋');}</script>