栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何过滤除特定白名单之外的所有HTML标签?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何过滤除特定白名单之外的所有HTML标签?

这是我为此任务编写的函数:

static string SanitizeHtml(string html){    string acceptable = "script|link|title";    string stringPattern = @"</?(?(?=" + acceptable + @")notag|[a-zA-Z0-9]+)(?:s[a-zA-Z0-9-]+=?(?:(["",']?).*?1?)?)*s*/?>";    return Regex.Replace(html, stringPattern, "sausage");}

编辑:由于某种原因,我将对先前答案的更正发布为单独的答案,因此我在此处进行合并。

我会解释一下正则表达式,因为它有点长。

第一部分与右方括号匹配,并使用0或1斜杠(如果它是结束标记)。

接下来,您将看到一个if-then构造,并具有前瞻性。(?(?= Sometag)then |
else)我正在检查字符串的下一部分是否是可接受的标签之一。您可以看到我将regex字符串与可接受的变量连接在一起,该变量是由竖线分隔的可接受的标记名,以便任何术语都可以匹配。如果匹配,则可以看到我输入了“
notag”一词,因为没有标签可以匹配它,如果可以接受,我想不加理会。否则,我将转到其他部分,在该部分我会匹配任何标签名称[az,AZ,0-9] +

接下来,我想匹配0个或多个属性,这些属性假定为attribute =“
value”形式。所以现在我将代表属性的那一部分分组,但是我使用?:来防止为速度而捕获该组:(?: s [az,AZ,0-9,-] + =?(?:([“
“,’]?)。 ? 1?))

在这里,我从标签和属性名称之间的空白字符开始,然后匹配属性名称:[az,AZ,0-9,-] +

接下来,我匹配一个等号,然后再引用一个。我对报价进行了分组,以便将其捕获,以后可以
1进行反向引用以匹配相同类型的报价。在这两个引号之间,您可以看到我使用句点来匹配任何内容,但是我使用的是惰性版本?而不是贪婪的版本,因此它将仅与将终止该值的下一个引号匹配。

接下来,我们在用圆括号括起来的组之后放一个*,以便它可以匹配多个属性/值组合(或不匹配)。最后,我们用
s匹配一些空格,并在xml样式自闭标签的标签中将0或1的结尾斜杠匹配。

您可以看到我正在用香肠替换标签,因为我饿了,但是您也可以用空字符串替换它们以清除它们。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/575553.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号