修复 GetSafeHtmlFragment x_ 前缀的正则表达式

发布于 2024-11-25 07:22:20 字数 848 浏览 2 评论 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”。

任何人都可以帮助我使用正则表达式来做到这一点吗?

谢谢

更新 - 这对我有用:

 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;
        }

When using Sanitizer.GetSafeHtmlFragment from Microsoft's AntiXSSLibrary 4.0, I noticed it changes my HTML fragment from:

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

to:

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

Sadly their API doesn't allow us to disable this behavior. Therefore I'd like to use a regular expression (C#) to fix and replace strings like "x_anything" to "anything", that occur inside a class="" attribute.

Can anyone help me with the RegEx to do this?

Thanks

UPDATE - this worked for me:

 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;
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暮凉 2024-12-02 07:22:20

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

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,"");
}

Im not 100% sure about the C# @(Verbatim symbol) but I think this should match x_ inside of any class="" and replace it with an empty string:

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,"");
}
庆幸我还是我 2024-12-02 07:22:20

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

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")

It's been over a year since this has been posted but here's some regex you can use that will remove up to three class instances. I'm sure there's a cleaner way but it gets the job done.

VB.Net Code:

Regex.Replace(myHtml, "(<\w+\b[^>]*?\b)(class="")x[_]([a-zA-Z]*)( )?(?:x[_])?([a-zA-Z]*)?( )?(?:x[_])?([^""]*"")", "$1$2$3$4$5$6$7")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文