0

当使用 Microsoft AntiXSSLibrary 4.0 中的 Sanitizer.GetSafeHtmlFragment 时,我注意到它改变了我的 HTML 片段:

<pre class="brush: csharp">
</pre>

到:

<pre class="x_brush: x_csharp">
</pre>

遗憾的是,他们的 API 不允许我们禁用此行为。因此,我想使用正则表达式 (C#) 来修复和替换出现在 class="" 属性内的字符串,例如“x_anything”到“anything”。

任何人都可以帮助我使用 RegEx 来做到这一点吗?

谢谢

更新- 这对我有用:

 private string FixGetSafeHtmlFragment(string html)
        {
            string input = html;
            Match match = Regex.Match(input, "class=\"(x_).+\"", RegexOptions.IgnoreCase);

            if (match.Success)
            {
                string key = match.Groups[1].Value;
                return input.Replace(key, "");
            }
            return html;
        }
4

2 回答 2

0

我不是 100% 确定 C# @(逐字符号),但我认为这应该x_在任何内部匹配class=""并将其替换为空字符串:

string input = 'class="x_something"';
Match match = Regex.Match(input, @'class="(x_).+"',
    RegexOptions.IgnoreCase);

if (match.Success)
{
    string key = match.Groups[1].Value;
    string v = input.Replace(key,"");
}
于 2011-07-18T19:20:00.047 回答
0

自发布以来已经有一年多了,但这里有一些您可以使用的正则表达式,它将删除最多三个类实例。我确信有一种更清洁的方法,但它可以完成工作。

VB.Net 代码:

Regex.Replace(myHtml, "(<\w+\b[^>]*?\b)(class="")x[_]([a-zA-Z]*)( )?(?:x[_])?([a-zA-Z]*)?( )?(?:x[_])?([^""]*"")", "$1$2$3$4$5$6$7")
于 2012-11-17T09:34:10.723 回答