Ejemplo n.º 1
0
        /// <summary>
        /// 得到安全的Html
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        public static string GetSafeHtml(string html)
        {
            if (html.IsNullOrEmpty())
            {
                return(html);
            }

            HtmlDocument doc = new HtmlDocument();

            doc.LoadHtml(html);

            List <HtmlNode> nodesToRemove = new List <HtmlNode>();
            IEnumerator     e             = doc
                                            .CreateNavigator()
                                            .SelectDescendants(System.Xml.XPath.XPathNodeType.All, false)
                                            .GetEnumerator();

            while (e.MoveNext())
            {
                HtmlNode node =
                    ((HtmlNodeNavigator)e.Current)
                    .CurrentNode;

                if (_DefaultNodeBlackList.Contains(node.Name))
                {
                    nodesToRemove.Add(node);
                }
                else
                {
                    FilterAttributes(node);
                    FilterScriptRelAttributes(node);
                }
            }

            nodesToRemove.ForEach(node => node.ParentNode.RemoveChild(node));

            StringBuilder strB = new StringBuilder();

            using (StringWriter writer = new StringWriter(strB))
                doc.Save(writer);

            return(strB.ToString());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 得到安全的Html
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        public static string GetSafeHtml(string html)
        {
            if (html.IsNullOrEmpty())
                return html;

            HtmlDocument doc = new HtmlDocument();

            doc.LoadHtml(html);

            List<HtmlNode> nodesToRemove = new List<HtmlNode>();
            IEnumerator e = doc
                .CreateNavigator()
                .SelectDescendants(System.Xml.XPath.XPathNodeType.All, false)
                .GetEnumerator();

            while (e.MoveNext())
            {
                HtmlNode node =
                    ((HtmlNodeNavigator)e.Current)
                    .CurrentNode;

                if (_DefaultNodeBlackList.Contains(node.Name))
                    nodesToRemove.Add(node);
                else
                {
                    FilterAttributes(node);
                    FilterScriptRelAttributes(node);
                }
            }

            nodesToRemove.ForEach(node => node.ParentNode.RemoveChild(node));

            StringBuilder strB = new StringBuilder();

            using (StringWriter writer = new StringWriter(strB))
                doc.Save(writer);

            return strB.ToString();
        }