首页 新闻 会员 周边 捐助

如何用C#正则表达式移除html代码中的"javascript:"部分

0
悬赏园豆:30 [已解决问题] 解决于 2015-05-04 12:07

要处理的html内容如下:

var html = @"<a href=""javascript:alert('bug!');"" target=""_blank"" onclick=""hello()"" onmouseover=javascript:alert('bug')>这是个bug</a>
<a href=javascript:alert('bug!'); target=""_blank"" onmouseover=""javascript:alert('bug')"">这是个bug</a>
&lt;>";

请问如何用正则表达式移除其中的"javascript:"部分?

正确移除后的内容如下:

@"<a target=""_blank"">这是个bug</a>
<a target=""_blank"">这是个bug</a>
&lt;>"
dudu的主页 dudu | 高人七级 | 园豆:29570
提问于:2015-04-30 17:11
< >
分享
最佳答案
1

html=Regex.Replace(html,@"(?<=<[a-z]+[^<]*)(\s*on[a-z]+(\s*=.*?)?)(?=\s+[^<]+/?>|/?>)","");

收获园豆:30
Yu | 专家六级 |园豆:12990 | 2015-05-01 13:59

正则功力深厚!经测试,这个正则就可以将html标签中所有以on开头的属性移除。

dudu | 园豆:29570 (高人七级) | 2015-05-02 21:08

加上移除 href="javascript:alert('bug!');" 的正则表达式,解决这个问题的正则表达试如下:

@"(?<=<[a-z]+[^<]*)(\s*on[a-z]+(\s*=.*?)?)(?=\s+[^<]+/?>|/?>)"
@"(<a[^>]*) href=['""]?javascript:.*?['""]?([ >])"

 

dudu | 园豆:29570 (高人七级) | 2015-05-04 12:03

这个正则表达式在实际使用中遇到了问题,测试代码如下:

var html = @"<div class=""cnblogs_code"">
<pre>#kpm-pack each='var projectFile in MANAGED_PROJECTS' configuration='${Configuration2}' kpmPackOutputDir='${BUILD_DIR}'</pre>
</div>";
var processedHtml = HtmlUtility.RemoveAllScripts(html);
Assert.Equal(html, processedHtml);

processedHtml却变成了:

<div class="cnblogs_code">
<pre>#kpm-pack each='var projectFile in MANAGED_PROJECTS' c>
</div>
dudu | 园豆:29570 (高人七级) | 2015-05-20 12:30

@dudu: 

html=Regex.Replace(html,@"(?<=<[a-z]+[^<]*)(\s+on[a-z]+(\s*=.*?)?)(?=\s+[^<]+/?>|/?>)","");

Yu | 园豆:12990 (专家六级) | 2015-05-20 19:49

@Yu: 测试通过!

dudu | 园豆:29570 (高人七级) | 2015-05-21 18:35
其他回答(2)
1
string s = "<a href=\"javascript:alert('bug!');\" target=\"_blank\" onmouseover=\"javascript:alert('bug')\" >这是个bug</a>";
Regex r=new Regex(@"\s{1}\w+=""javascript:.+?""");
var re=r.Replace(s, "");

r =new Regex(@"\s{1}\w+=javascript:.+?\s{1}");
re = r.Replace(re, "");

r = new Regex(@"\s{1}\w+=javascript:.+?>");
re = r.Replace(re, ">");
Console.WriteLine(re);

考虑多种情况,那么多次匹配取值。。

幻天芒 | 园豆:37207 (高人七级) | 2015-04-30 17:57
0

 有个说法是用正则来处理html是很低效的,相比不如当作xml文档使用xml库好。

arg | 园豆:1047 (小虾三级) | 2015-05-01 00:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册