文档章节

HTML标签过滤方案

kevin_pang
 kevin_pang
发布于 2012/03/15 00:50
字数 510
阅读 2054
收藏 1

在数据库中存入标签的HTML转换符,按照原样输出。

在存入数据库之前,加上server.htmlEncode(txtboxName.text);

解决方案2:

在数据库中不存入HTML标签的有关信息,过滤HTML标签,只显示文字。

存 入数据库之前加上过滤函数过滤便可:checkStr(txtboxName.text)或者StripHTML(txtboxName.text)或者 NoHTML(txtboxName.text);(提供三个过滤函数,任选一个,添加命名空间:using System.Text.RegularExpressions;)

以下代码均调试通过:

        /// <summary>

        /// HTML过滤方法一

        /// </summary>

        /// <param name="html"></param>

        /// <returns></returns>

        public string checkStr(string html)

        {

            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;

        }

 

#region 过滤掉html代码


 ///   <summary>

        ///   方法二:去除HTML标记

        ///   </summary>

        ///   <param   name="StripHtml">包括HTML的源码  </param>

        ///   <returns>已经去除后的文字</returns>

 

        public static string StripHTML(string strHtml)

        {

            string[] aryReg ={

                                @"<script[^>]*?>.*?</script>",

 

                                @"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",

                                @"([\r\n])[\s]+",

                                @"&(quot|#34);",

                                @"&(amp|#38);",

                                @"&(lt|#60);",

                                @"&(gt|#62);",

                                @"&(nbsp|#160);",

                                @"&(iexcl|#161);",

                                @"&(cent|#162);",

                                @"&(pound|#163);",

                                @"&(copy|#169);",

                                @"&#(\d+);",

                                @"-->",

                                @"<!--.*\n"

                               };

 

            string[] aryRep = {

                                "",

                                "",

                                "",

                                "\"",

                                "&",

                                "<",

                                ">",

                                " ",

                                "\xa1",//chr(161),

                                "\xa2",//chr(162),

                                "\xa3",//chr(163),

                                "\xa9",//chr(169),

                                "",

                                "\r\n",

                                ""

                               };

 

            string newReg = aryReg[0];

            string strOutput = strHtml;

            for (int i = 0; i < aryReg.Length; i++)

            {

                System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(aryReg[i], System.Text.RegularExpressions.RegexOptions.IgnoreCase);

                strOutput = regex.Replace(strOutput, aryRep[i]);

            }

            strOutput.Replace("<", "");

            strOutput.Replace(">", "");

            strOutput.Replace("\r\n", "");

            return strOutput;

        }

        #endregion


///   <summary>

        ///   方法三:去除HTML标记

        ///   </summary>

        ///   <param   name="NoHTML">包括HTML的源码  </param>

        ///   <returns>已经去除后的文字</returns>

        public static string NoHTML(string Htmlstring)

        {

            //删除脚本

            Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "",

              RegexOptions.IgnoreCase);

            //删除HTML

            Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "",

              RegexOptions.IgnoreCase);

            Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "",

              RegexOptions.IgnoreCase);

            Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);

            Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);

            Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"",

              RegexOptions.IgnoreCase);

            Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&",

              RegexOptions.IgnoreCase);

© 著作权归作者所有

共有 人打赏支持
kevin_pang
粉丝 9
博文 49
码字总数 80470
作品 0
深圳
程序员
私信 提问
百度编辑器UEditor源码模式下过滤div/style等html标签

UEditor在html代码模式下,当输入带有<div style="">、<iframe>这类带有html标签的内容时,切换为编辑器模式后,会发现输入的内容被删除,自动过滤掉了。提供两种解决方案: 1、“白名单法“...

makingdifference
2016/11/15
2.5K
0
KindEditor 4.1.1 发布

根据国家信息安全漏洞共享平台(即中国国家漏洞库,CNVD)要求,4.1.1版本开始默认开启白名单过滤,只能使用htmlTags里定义的HTML标签和属性,其它标签和属性会被编辑器过滤。如果要允许输入...

红薯
2012/06/12
1K
2
shalalal/MonkeyPHP

##MonkeyPHP MonkeyPHP是一个完全面向对象的轻量级 PHP 框架! ###主要特点: 一、设计规范,容易部署。 二、支持 MVC 和 REST 等web架构。 三、路由既高效强大,又易于定制。 四、松耦合设计...

shalalal
2014/06/08
0
0
字符过滤组件--wuxiu.safeHelper

wuxiu.safeHelper是一个字符过滤组件,是基于.NET framework平台,其中HtmlSaferAnalyser类可以实现对HTML村签的过滤功能,当然正则表达式也可以轻易实现html过滤,为什么还需要safeHelper呢...

aspx8855
2014/05/20
429
0
百度编辑器UEditor不能插入视频的解决方法

xssFilter导致插入视频异常,编辑器在切换源码的过程中过滤掉img的url属性(用来存储视频url)src/plugins/video.js里处理的是url,而不是src。<基本出处参见:https://github.com/fex-team...

makingdifference
2016/11/15
4.1K
2

没有更多内容

加载失败,请刷新页面

加载更多

域名重定向、用户认证

域名重定向 什么是域名重定向 域名重定向是通过设置web服务的配置文件,将原本访问A域名的请求访问到B域名。 为什么要做域名重定向? 一个比较简单的例子:之前做了一个网站,域名又长又复杂...

李超小牛子
29分钟前
2
0
jvm

public class Demo {    /**     * 成员变量(俗称全局变量),//有缺省值为0     *      静态变量(也称类变量),带static的     *      实例变量...

废柴
45分钟前
0
0
【Mysql技术内幕】第3章 文件

第3章 文件 3.1 参数文件 mysql 数据库的参数文件是以文本的形式进行存储的,可以用vim进行修改 my.ini my.conf等 3.1.1 什么是参数 SHOW VARIABLES 可以查看mysql 配置参数 3.1.2 参数类型 ...

HOT_POT
今天
0
0
Java8 如何正确使用 Optional

原文链接:https://blog.kaaass.net/archives/764 Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在...

大灰狼时间
今天
5
0
富兰克林的人生信条

春节假期期间读了富兰克林自传,这位饱经风霜的老人出身贫寒,只读过两年书,但是通过刻苦自学和不懈奋斗还是取得了令人难以置信的成就,他的一生可以作为我们普通人的励志典范。 富兰克林 ...

春哥大魔王的博客
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部