加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – HttpUtility.HtmlEncode逃避太多了?

发布时间:2020-05-24 15:00:16 所属栏目:asp.Net 来源:互联网
导读:在我们的MVC3 ASP.net项目中,HttpUtility. HtmlEncode方法似乎逃避了太多的字符.我们的网页作为UTF-8页面提供,但该方法仍然可以转换字符,如ü或日元字符,即使这些字符是 UTF-8 set的一部分. 所以当我的asp.net MVC视图包含以下代码时: @(strongümlaut/stron

在我们的MVC3 ASP.net项目中,HttpUtility. HtmlEncode方法似乎逃避了太多的字符.我们的网页作为UTF-8页面提供,但该方法仍然可以转换字符,如ü或日元字符,即使这些字符是 UTF-8 set的一部分.

所以当我的asp.net MVC视图包含以下代码时:

@("<strong>ümlaut</strong>")

然后我希望Encoder能够逃避html标签,但不是ümlaut

&lt;strong&gt;ümlaut&lt;/strong&gt;

但相反,它给了我以下HTML:

&lt;strong&gt;&#252;mlaut&lt;/strong&gt;

为了完整起见,我还提到web.config中的responseEncoding明确地设置为utf-8,所以我希望HtmlEncode方法能够遵循这个设置.

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

解决方法

是的,我的网页面临同样的问题.
如果我们看到htmlEncode的代码,那么有一个点可以翻译这组字符.这是这种字符也翻译的代码.
if ((ch >= 'x00a0') && (ch < 'A'))
{
    output.Write("&#");
    output.Write(ch.ToString(NumberFormatInfo.InvariantInfo));
    output.Write(';');
}
else
{
    output.Write(ch);
}

这是HtmlEncode的代码

public static unsafe void HtmlEncode(string value,TextWriter output)
{
    if (value != null)
    {
        if (output == null)
        {
            throw new ArgumentNullException("output");
        }
        int num = IndexOfHtmlEncodingChars(value,0);
        if (num == -1)
        {
            output.Write(value);
        }
        else
        {
            int num2 = value.Length - num;
            fixed (char* str = ((char*) value))
            {
                char* chPtr = str;
                char* chPtr2 = chPtr;
                while (num-- > 0)
                {
                    output.Write(chPtr2[0]);
                    chPtr2++;
                }
                while (num2-- > 0)
                {
                    char ch = chPtr2[0];
                    if (ch <= '>')
                    {
                        switch (ch)
                        {
                            case '&':
                            {
                                output.Write("&amp;");
                                chPtr2++;
                                continue;
                            }
                            case ''':
                            {
                                output.Write("&#39;");
                                chPtr2++;
                                continue;
                            }
                            case '"':
                            {
                                output.Write("&quot;");
                                chPtr2++;
                                continue;
                            }
                            case '<':
                            {
                                output.Write("&lt;");
                                chPtr2++;
                                continue;
                            }
                            case '>':
                            {
                                output.Write("&gt;");
                                chPtr2++;
                                continue;
                            }
                        }
                        output.Write(ch);
                        chPtr2++;
                        continue;
                    }
                    // !here is the point!
                    if ((ch >= 'x00a0') && (ch < ''))
                    {
                        output.Write("&#");
                        output.Write(ch.ToString(NumberFormatInfo.InvariantInfo));
                        output.Write(';');
                    }
                    else
                    {
                        output.Write(ch);
                    }
                    chPtr2++;
                }
            }
        }
    }
}

a可能的解决方案是制作自定义HtmlEncode,或使用MS的反跨站点脚本.

http://msdn.microsoft.com/en-us/security/aa973814

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读