public IActionResult Document(Models.EditDocumentRequestModel requestModel) { requestModel.AccountId = HttpContext.Session.GetInt32("AccountId").GetValueOrDefault(0); if (requestModel.Title.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档标题")); } if (requestModel.Contents.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档内容")); } var repository = _unitOfWork.GetRepository <Entity.m_Docs>(); Entity.m_Docs model = repository.Query().Where(q => q.DocsId == requestModel.DocsId).FirstOrDefault(); if (model == null) { return(APIReturnMethod.ReturnFailed("您要编辑的文档内容信息不存在!")); } if (model.AccountId != requestModel.AccountId) { return(APIReturnMethod.ReturnFailed("您无权对当前的数据进行编辑操作!")); } model.Contents = HtmlFilter.SanitizeHtml(requestModel.Contents); model.LastTime = DateTime.Now; model.Title = HtmlFilter.StripHtml(requestModel.Title); model.ShortTitle = HtmlFilter.StripHtml(requestModel.ShortTitle); repository.Update(model); var resultCount = _unitOfWork.SaveChanges(); return(resultCount > 0 ? APIReturnMethod.ReturnSuccess() : APIReturnMethod.ReturnFailed()); }
protected void Submit_Click(object sender, EventArgs args) { if (!IsAuthorized) { cvAuthorized.IsValid = false; return; } HtmlFilter filter = Engine.Resolve <HtmlFilter>(); Items.WikiArticle article = CurrentPage; if (IsNew) { article = Engine.Resolve <ContentActivator>().CreateInstance <Items.WikiArticle>(CurrentPage); article.Title = filter.StripHtml(CurrentArguments); article.Name = filter.CleanUrl(CurrentArguments); } else { Engine.Resolve <IVersionManager>().SaveVersion(article); } article["SavedDate"] = DateTime.Now; article["SavedByAddress"] = Request.UserHostAddress; article["Syndicatable"] = CurrentPage.WikiRoot["Syndicatable"]; article.Text = filter.FilterHtml(txtText.Text); Engine.Persister.Save(article); Response.Redirect(article.Url); }
public IActionResult Post([FromBody] Models.ThemeCreateRequestModel requestModel) { if (requestModel.Title.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档主题标题")); } if (requestModel.Contents.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档主题内容")); } Entity.m_DocsTheme model = new Entity.m_DocsTheme(); model.AppendTime = DateTime.Now; model.Contents = HtmlFilter.SanitizeHtml(requestModel.Contents); model.IsShow = true; model.LastTime = DateTime.Now; model.PlusCount = 0; model.ReadCount = 0; model.Tags = ""; model.Title = HtmlFilter.StripHtml(requestModel.Title); model.AccountId = requestModel.AccountId; model.VersionText = ""; var repository = _unitOfWork.GetRepository <Entity.m_DocsTheme>(); repository.Insert(model); var resultCount = _unitOfWork.SaveChanges(); return(resultCount > 0 ? APIReturnMethod.ReturnSuccess() : APIReturnMethod.ReturnFailed()); }
public IActionResult Put([FromBody] Models.ThemeEditRequestModel requestModel) { if (requestModel.Title.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档主题标题")); } if (requestModel.Contents.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档主题内容")); } var repository = _unitOfWork.GetRepository <Entity.m_DocsTheme>(); Entity.m_DocsTheme model = repository.Query().Where(q => q.ThemeId == requestModel.ThemeId).FirstOrDefault(); if (model == null) { return(APIReturnMethod.ReturnFailed("您要编辑的文档主题信息不存在!")); } if (model.AccountId != requestModel.AccountId) { return(APIReturnMethod.ReturnFailed("您无权对当前的数据进行编辑操作!")); } model.Contents = HtmlFilter.SanitizeHtml(requestModel.Contents); model.LastTime = DateTime.Now; model.Title = HtmlFilter.StripHtml(requestModel.Title); model.VersionText = ""; repository.Update(model); var resultCount = _unitOfWork.SaveChanges(); return(resultCount > 0 ? APIReturnMethod.ReturnSuccess() : APIReturnMethod.ReturnFailed()); }
public IActionResult Index(Models.ReleaseRequestModel requestModel) { requestModel.AccountId = HttpContext.Session.GetInt32("AccountId").GetValueOrDefault(0); if (string.IsNullOrEmpty(requestModel.Title) || requestModel.Title == "") { return(APIReturnMethod.ReturnFailed("标题不能为空")); } if (string.IsNullOrEmpty(requestModel.Contents) || requestModel.Contents == "") { return(APIReturnMethod.ReturnFailed("内容不能为空")); } // Entity.m_CmsContents entity = new Entity.m_CmsContents(); entity.Contents = HtmlFilter.SanitizeHtml(requestModel.Contents); entity.ImgUrl = string.Empty; entity.StateCode = 1; entity.PostTime = DateTime.Now; entity.PlusCount = 0; entity.LastTime = DateTime.Now; entity.Tags = ""; entity.ReadCount = 0; entity.Title = requestModel.Title; entity.AccountId = requestModel.AccountId; entity.AnswerCount = 0; entity.ChannelId = requestModel.ChannelId; var repository = _unitOfWork.GetRepository <Entity.m_CmsContents>(); repository.Insert(entity); int resultCount = _unitOfWork.SaveChanges(); return(resultCount > 0 ? APIReturnMethod.ReturnSuccess() : APIReturnMethod.ReturnFailed()); }
public IActionResult Document(Models.DocsContentsCreateRequestModel requestModel) { requestModel.AccountId = HttpContext.Session.GetInt32("AccountId").GetValueOrDefault(0); if (requestModel.Title.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档标题")); } if (requestModel.Contents.Trim().Length <= 0) { return(APIReturnMethod.ReturnFailed("请输入文档内容")); } Entity.m_Docs model = new Entity.m_Docs(); model.AppendTime = DateTime.Now; model.Contents = HtmlFilter.SanitizeHtml(requestModel.Contents); model.IsShow = true; model.LastTime = DateTime.Now; model.PlusCount = 0; model.ReadCount = 0; model.Tags = ""; model.Title = HtmlFilter.StripHtml(requestModel.Title); model.AccountId = requestModel.AccountId; model.VersionText = ""; model.ThemeId = requestModel.ThemeId; model.ShortTitle = HtmlFilter.StripHtml(requestModel.ShortTitle); model.IsAudit = true; var repository = _unitOfWork.GetRepository <Entity.m_Docs>(); repository.Insert(model); var resultCount = _unitOfWork.SaveChanges(); return(resultCount > 0 ? APIReturnMethod.ReturnSuccess() : APIReturnMethod.ReturnFailed()); }
public static void BubbleDeletedPopUp(Control control, String DeletedName) { DeletedName = HtmlFilter.StipTags(DeletedName); DeletedName += (String)HttpContext.GetGlobalResourceObject("Global", "BubbleDeletedString_Resource") + " " + "<a href = \"\"> X</a>"; ScriptManager.RegisterStartupScript(control, typeof(string), "DeleteBubblePopup", String.Format("bubbleNotify('{0}');", DeletedName), true); }
public void testAllowedTags() { String input = "这是多种<span>内容1</span>标签和<strong>内容2</strong>风格,还有<img src=\"\" />图片与<a href=\"abc.html\">链接</a>对吗?"; String result = HtmlFilter.Filter(input, "strong"); Assert.AreEqual("这是多种内容1标签和<strong>内容2</strong>风格,还有图片与链接对吗?", result); result = HtmlFilter.Filter(input, "img"); Assert.AreEqual("这是多种内容1标签和内容2风格,还有<img src=\"\" />图片与链接对吗?", result); result = HtmlFilter.Filter(input, "a"); Assert.AreEqual("这是多种内容1标签和内容2风格,还有图片与<a href=\"abc.html\">链接</a>对吗?", result); result = HtmlFilter.Filter(input, "img,a"); Assert.AreEqual("这是多种内容1标签和内容2风格,还有<img src=\"\" />图片与<a href=\"abc.html\">链接</a>对吗?", result); // 对换行的测试 result = HtmlFilter.Filter("这是多种内容1标签和<br>内容2风格", "br"); Assert.AreEqual("这是多种内容1标签和<br>内容2风格", result); // TODO 这个测试不能通过 //result = HtmlFilter.Filter( "这是多种内容1标签和<br/>内容2风格", "br" ); //Assert.AreEqual( "这是多种内容1标签和<br/>内容2风格", result ); result = HtmlFilter.Filter("这是多种内容1标签和<br >内容2风格", "br"); Assert.AreEqual("这是多种内容1标签和<br >内容2风格", result); result = HtmlFilter.Filter("这是多种内容1标签和<br />内容2风格", "br"); Assert.AreEqual("这是多种内容1标签和<br />内容2风格", result); result = HtmlFilter.Filter("这是<strong>多种</strong>内容1标签和<br>内容2风格", "strong"); Assert.AreEqual("这是<strong>多种</strong>内容1标签和内容2风格", result); }
public void testStyle() { String input = @"<style id=""abc""> .h1 { FONT-WEIGHT: bold; TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 22pt; MARGIN: 17pt 0cm 16.5pt; LINE-HEIGHT: 240%; TEXT-ALIGN: justify } .h2 { FONT-WEIGHT: bold; TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 16pt; MARGIN: 13pt 0cm; LINE-HEIGHT: 173%; TEXT-ALIGN: justify } .h3 { FONT-WEIGHT: bold; TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 16pt; MARGIN: 13pt 0cm; LINE-HEIGHT: 173%; TEXT-ALIGN: justify } .h1 { FONT-WEIGHT: bold; TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 22pt; MARGIN: 17pt 0cm 16.5pt; LINE-HEIGHT: 240%; TEXT-ALIGN: justify } .h2 { FONT-WEIGHT: bold; TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 16pt; MARGIN: 13pt 0cm; LINE-HEIGHT: 173%; TEXT-ALIGN: justify } .h3 { FONT-WEIGHT: bold; TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 16pt; MARGIN: 13pt 0cm; LINE-HEIGHT: 173%; TEXT-ALIGN: justify } </style>" + @"<P> <FONT face=楷体_GB2312>从1990年至2000年期间,人文社会科学领域学术期刊的价格涨幅高达185.9%,科技和医学领域学术期刊价格涨幅分别达178.3%和184.3%。全球范围内出现的“期刊危机”,倒逼科技界提出一项全新的出版理念——“开放获取”。 </FONT></P> <P><FONT face=楷体_GB2312> 所谓“开放获取”(Open Access),是指科学研究信息在网络环境中,免费供公众自由获取。开放获取有两种实现形式:一为开放出版,即期刊或会议论文出版后立即开放获取;二是开放存储,即论文出版后存储到相关知识库,一段时间后开放获取。</FONT></P> "; String result = HtmlFilter.Filter(input); Console.WriteLine(result); }
public static void BubbleSavePopUp(Control control, String SavedName, int delayTime, int fadeOutTime) { SavedName = HtmlFilter.StipTags(SavedName); SavedName += (String)HttpContext.GetGlobalResourceObject("Global", "BubbleAddedString_Resource") + " " + "<a href = \"\"> X</a>"; ScriptManager.RegisterStartupScript(control, typeof(string), "SaveBubblePopup", String.Format("bubbleNotifyCustomDelay('{0}', {1}, {2});", SavedName, delayTime, fadeOutTime), true); }
public void testTableTag() { String input = "<table></table>"; String str = HtmlFilter.Filter(input); Assert.AreEqual(input, str); input = "<table><tr><td>abc</td></tr></table>"; str = HtmlFilter.Filter(input); Assert.AreEqual(input, str); input = "<table ><tr ><td > abc </td></tr></table>"; str = HtmlFilter.Filter(input); Assert.AreEqual(input, str); input = "<table border=\"5\"><tr ><td > abc </td></tr></table>"; str = HtmlFilter.Filter(input); Assert.AreEqual(input, str); // 不在白名单的属性会被删除 String newInput = "<table border=\"5\" data-new=\"88\"><tr ><td > abc </td></tr></table>"; str = HtmlFilter.Filter(newInput); Assert.AreEqual(input, str); }
protected void btnSubmit_Click(object sender, EventArgs e) { HtmlFilter filter = Engine.Resolve <HtmlFilter>(); string name = filter.CleanUrl(txtName.Text); string url = Url.Parse(CurrentPage.WikiRoot.Url).AppendSegment(name); Response.Redirect(url); }
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); XDocument myXDoc = XDocument.Load(HttpContext.Current.Server.MapPath("~/htmlfilter.xml")); XElement ele = myXDoc.Element("config"); FilterXmlConfig filterXmlConfig = new FilterXmlConfig(ele); htmlFilter = new HtmlFilter(filterXmlConfig); }
public void HtmlFilter() { IHootFilter _filter = new HtmlFilter(); String _result; _filter.InitializeFilter(null); _result = _filter.FilterText(_htmlSource); Assert.AreEqual(_result.Replace("\r", ""), _htmlResult.Replace("\r", "")); }
public void testFilter() { String input = "这是脚本<script>引用了</script>内容"; String result = HtmlFilter.Filter(input); Assert.AreEqual("这是脚本内容", result); Console.WriteLine(result); }
public void testAllowedFlash() { String input = "<object CLASSID=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" data=\"http://player.youku.com/player.php/sid/XMTg0MTI0NjU2/v.swf\" type=\"application/x-shockwave-flash\" width=\"300\" height=\"255\"><param name=\"movie\" value =\"http://player.youku.com/player.php/sid/XMTg0MTI0NjU2/v.swf\" /></object>"; String str = HtmlFilter.Filter(input); Assert.AreEqual(input, str); input = "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0\" width=\"95\" height=\"360\"> <param name=\"movie\" value=\"a.swf\" /> <param name=\"quality\" value=\"high\" /> <embed src=\"a.swf\" quality=\"high\" pluginspage=\"http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash\" type=\"application/x-shockwave-flash\" width=\"300\" height=\"255\"></embed></object>"; str = HtmlFilter.Filter(input); Assert.AreEqual(input, str); }
public void testLink() { String str = "aaa<a href=\"xxx.html\">ccc</a>zzz"; string val = HtmlFilter.Filter(str); Assert.AreEqual(val, str); str = "AAA<a href=\"XXX.html\">CCC</a>ZZZ"; val = HtmlFilter.Filter(str); Assert.AreEqual(val, str); }
/// <summary> /// 在默认白名单的基础上,允许 allowedTags 中指定的tag /// </summary> /// <param name="postItem"></param> /// <param name="allowedTags"></param> /// <returns></returns> public String PostHtmlAppendTags(String postItem, String allowedTags) { String val = _context.post(postItem); if (val != null) { val = strUtil.TrimHtml(val); val = HtmlFilter.FilterAppendTags(val, allowedTags); } return(val); }
/// <summary> /// Removes non allowed tags from the string. Non allowed tags are defined in the <see cref="DefaultFilterRules"/> class. /// In this scenario we add the ability to allow the element img to have width and height /// </summary> /// <param name="input">A string that may contain html-tags.</param> /// <returns> /// The input washed from non allowed html-tags. /// </returns> public static string ToSafeString(this string input) { using (var inputStream = new StringReader(input)) using (var outputStrean = new StringWriter()) { DefaultFilterRules defaultRules = new DefaultFilterRules(elem => GetAttributesForElement(elem), new DefaultFilterRules()); HtmlFilter filter = new HtmlFilter(defaultRules); filter.FilterHtml(inputStream, outputStrean); return(outputStrean.ToString()); } }
/// <summary> /// 获取客户端 post 的 html,结果已被过滤,只允许 allowedTags 中指定的 tag /// </summary> /// <param name="postItem"></param> /// <param name="allowedTags">允许的tag,包括属性列表</param> /// <returns></returns> public String PostHtml(String postItem, Dictionary <String, String> allowedTags) { String val = _context.post(postItem); if (val != null) { val = strUtil.TrimHtml(val); val = HtmlFilter.Filter(val, allowedTags); } return(val); }
public static void BubbleNotify(Control control, string description, bool addCloseButton) { description = HtmlFilter.StipTags(description); // add close button if (addCloseButton) { description = string.Format("{0} <a href = \"\">X</a>", description); } ScriptManager.RegisterStartupScript(control, typeof(string), "bubbleNotification", string.Format("bubbleNotify('{0}');", description), true); }
public void testAllowedTags() { String input = "这是多种<span>内容1</span>标签和<strong>内容2</strong>风格,还有<img src=\"\" />图片与<a href=\"abc.html\">链接</a>对吗?"; String result = HtmlFilter.Filter(input, "strong"); Assert.AreEqual("这是多种内容1标签和<strong>内容2</strong>风格,还有图片与链接对吗?", result); result = HtmlFilter.Filter(input, "img"); Assert.AreEqual("这是多种内容1标签和内容2风格,还有<img src=\"\" />图片与链接对吗?", result); result = HtmlFilter.Filter(input, "a"); Assert.AreEqual("这是多种内容1标签和内容2风格,还有图片与<a href=\"abc.html\">链接</a>对吗?", result); result = HtmlFilter.Filter(input, "img,a"); Assert.AreEqual("这是多种内容1标签和内容2风格,还有<img src=\"\" />图片与<a href=\"abc.html\">链接</a>对吗?", result); // 对换行的测试 result = HtmlFilter.Filter("这是多种内容1标签和<br>内容2风格", "br"); Assert.AreEqual("这是多种内容1标签和<br>内容2风格", result); result = HtmlFilter.Filter("这是多种内容1标签和<br >内容2风格", "br"); Assert.AreEqual("这是多种内容1标签和<br >内容2风格", result); result = HtmlFilter.Filter("这是多种内容1标签和<br />内容2风格", "br"); Assert.AreEqual("这是多种内容1标签和<br />内容2风格", result); result = HtmlFilter.Filter("这是多种内容1标签和<br/>内容2风格", "br"); Assert.AreEqual("这是多种内容1标签和<br/>内容2风格", result); result = HtmlFilter.Filter("这是<strong>多种</strong>内容1标签和<br>内容2风格", "strong"); Assert.AreEqual("这是<strong>多种</strong>内容1标签和内容2风格", result); //----------------------------------------- input = "文字<style>div{color:red;}</style>内容"; result = HtmlFilter.Filter(input, "style"); Assert.AreEqual(input, result); Dictionary <String, String> dic = new Dictionary <String, String>(); dic.Add("script", "src"); input = "文字<script src=\"aa\">some code</script>内容"; result = HtmlFilter.Filter(input, dic); Assert.AreEqual(input, result); dic = new Dictionary <String, String>(); dic.Add("script", "src"); // 没有的属性会被过滤 input = "文字<script src=\"aa\" xdata=99>some code</script>内容"; result = HtmlFilter.Filter(input, dic); Assert.AreEqual("文字<script src=\"aa\">some code</script>内容", result); }
public void testBase() { String input = "这是脚本<script>引用了</script>内容"; String result = HtmlFilter.Filter(input); Assert.AreEqual("这是脚本内容", result); Console.WriteLine(result); input = "<P> <FONT face=楷体_GB2312>从1990年至2000年期间 </FONT></P> "; result = HtmlFilter.Filter(input); // 过滤之后,会给属性加上引号 Assert.AreEqual("<P> <FONT face=\"楷体_GB2312\">从1990年至2000年期间 </FONT></P> ", result); }
/// <summary> /// 获取客户端 post 的 html,结果已被过滤,只有在白名单中的 tag 才被允许 /// </summary> /// <param name="postItem"></param> /// <returns></returns> public String PostHtml(String postItem) { String val = _context.post(postItem); if (val != null) { if (this.viewer != null && this.viewer.IsAdministrator()) { return(val); } val = strUtil.TrimHtml(val); val = HtmlFilter.Filter(val); } return(val); }
public void testComment() { // 默认是允许注释的 String input = "<ul><!-- BEGIN list --><li>这是注释</li><!-- END list --></ul>"; String result = HtmlFilter.Filter(input); Assert.AreEqual("<ul><!-- BEGIN list --><li>这是注释</li><!-- END list --></ul>", result); input = "<!--abcd<script>alert( 'abcd' );</script>123-->"; result = HtmlFilter.Filter(input); Assert.AreEqual("<!--abcd123-->", result); }
protected string getMatchedBody(string page, SpiderTemplate s, StringBuilder sb) { Match match = Regex.Match(page, s.GetDetailPattern(), RegexOptions.Singleline); if (match == null || !match.Success || string.IsNullOrEmpty(match.Value)) { logInfo("error=没有匹配的页面内容:" + _url, this._url, s, sb); return(null); } page = match.Groups[1].Value; String fpage = HtmlFilter.Filter(page); // 过滤广告 return(fpage); }
private async void BtnCompare_Click(object sender, RoutedEventArgs e) { try { // First load the html into a document objects we can manipulate string html1 = await File.ReadAllTextAsync("Resources/bbc1.html"); HtmlDocument doc1 = new HtmlDocument(); doc1.LoadHtml(html1); string html2 = await File.ReadAllTextAsync("Resources/bbc2.html"); HtmlDocument doc2 = new HtmlDocument(); doc2.LoadHtml(html2); // Filter the html to remove parts that are not very interesting HtmlFilter filter = new HtmlFilter(); filter.CleanHtml(doc1.DocumentNode); filter.CleanHtml(doc2.DocumentNode); // convert the html into lines HtmlConverter converter = new HtmlConverter(); var lines1 = converter.GetLines(doc1.DocumentNode, ConvertOptions.Default); var lines2 = converter.GetLines(doc2.DocumentNode, ConvertOptions.Default); // find the difference between these 2 sets of lines LineDiffer differ = new LineDiffer(); var diffResult = differ.GetDiff(lines1, lines2, true); // load the original html into a document again HtmlDocument originalDoc = new HtmlDocument(); originalDoc.LoadHtml(html1); // highlight the changed parts of the document Highlighter.ApplyHighlights(originalDoc, "#FFFF99", diffResult.Added.Select(i => i.Line.XPath)); string htmlHighlighted = originalDoc.Save(); webBrowserDiff.NavigateToString(htmlHighlighted); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void testScriptAndIFrame() { string val = HtmlFilter.Filter("国灭亡论,是中国人就得看!!!——日本宣称将于2015年灭亡中国。本文并非在下所写,只是基于一个爱国者的心,将此文贴于此。(这是一个在日本人气极旺的帖子,感谢一位不知名的网友,翻译过来。本着“奇文共欣赏,疑义相与析”的原则,转载过来是给大家一个对“日本”这个禽兽国度清醒的"); Assert.AreEqual(val, target); val = HtmlFilter.Filter("国灭亡论,是中国人就得看!!!——日本宣称将于2015年灭亡中国。本文并非在下所写,只是基于一个爱国者的心,将此文贴于此。(这是<script> alert( 'kkkkk'); </script>一个在日本人气极旺的帖子,感谢一位不知名的网友,翻译过来。本着“奇文共欣赏,疑义相与析”的原则,转载过来是给大家一个对“日本”这个禽兽国度清醒的"); Assert.AreEqual(val, target); val = HtmlFilter.Filter("国灭亡论,是中国人就得看!!!——日本宣称将于2015年灭亡中国。本文并非在下所写,只是基于一个爱国者的心,将此文贴于此。(这是<iframe src=abc.php width=500> </iframe>一个在日本人气极旺的帖子,感谢一位不知名的网友,翻译过来。本着“奇文共欣赏,疑义相与析”的原则,转载过来是给大家一个对“日本”这个禽兽国度清醒的"); Assert.AreEqual(val, target); val = HtmlFilter.Filter("国灭亡论,是中国人就得看!!!——日本宣称将于2015年灭亡中国。本文并非在下所写,只是基于一个爱国者的心,将此文贴于此。(这是<scRIPT> alert( 'kkkkk'); </SCRIPT>一个在日本人气极旺的帖子,感谢一位不知名的网友,翻译过来。本着“奇文共欣赏,疑义相与析”的原则,转载过来是给大家一个对“日本”这个禽兽国度清醒的"); Assert.AreEqual(val, target); val = HtmlFilter.Filter("国灭亡论,是中国人就得看!!!——日本宣称将于2015年灭亡中国。本文并非在下所写,只是基于一个爱国者的心,将此文贴于此。(这是<ifRAme src=abc.php width=500> </IfRAMe>一个在日本人气极旺的帖子,感谢一位不知名的网友,翻译过来。本着“奇文共欣赏,疑义相与析”的原则,转载过来是给大家一个对“日本”这个禽兽国度清醒的"); Assert.AreEqual(val, target); }
public static bool ValidateFilter(this HtmlFilter filter, out string error) { error = null; switch (filter.Type) { case HtmlFilterType.Regex: try { // ReSharper disable once ObjectCreationAsStatement new Regex(filter.Filter); return(true); } catch (Exception ex) { error = ex.Message; } return(false); case HtmlFilterType.XPath: try { XPathExpression.Compile(filter.Filter); return(true); } catch (Exception ex) { error = ex.Message; } return(false); default: throw new NotImplementedException("Invalid filter type"); } }
public ActionResult GetContent(HtmlFilter hf, int?page) { Html html = new Html(); if (hf.DivId == null) { hf.DivId = "list_middle"; } if (page == 1 || page == 0 || page == null) { html.contentList = GetFilteredContent(hf.URL, hf.Keyword, hf.DivId); } else if (page > 0 && page > 1) { html.contentList = GetFilteredContent(hf.URL, hf.Keyword, hf.DivId); for (int i = 1; i <= page; i++) { hf.URL = "http://www.sydneytoday.com/job_information?page=" + i; html.contentList.AddRange(GetFilteredContent(hf.URL, hf.Keyword, hf.DivId)); } } return(View(html)); }
public static string Filter(this HtmlFilter filter, string content) { switch (filter.Type) { case HtmlFilterType.Regex: var filteredContents = new List <string>(); var regex = new Regex(filter.Filter, RegexOptions.Singleline); var matches = regex.Matches(content); for (int i = 0; i < matches.Count; i++) { var match = matches[i]; if (match.Success == false) { continue; } for (int j = 1; j < match.Groups.Count; j++) { filteredContents.Add(match.Groups[j].Value); } } if (filteredContents.Any() == false) { return(null); } content = string.Join("\r\n", filteredContents); break; case HtmlFilterType.XPath: try { HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(content); filteredContents = htmlDoc.DocumentNode .SelectNodes(filter.Filter) ?.Select(n => n.OuterHtml) .ToList(); // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (filteredContents == null || filteredContents.Any() == false) { return(null); } content = string.Join("\r\n", filteredContents); } catch (Exception ex) { LogTo.Error(ex, $"Invalid XPath filter '{filter}'"); throw; } break; default: throw new NotImplementedException($"Feed filter type {filter.Type} not implemented"); } if (filter.Children.Any()) { var subContents = filter.Children.Select(f => f.Filter(content)).ToList(); if (subContents.Any() == false) { return(null); } return(string.Join("\r\n", subContents)); } return(content); }