【问题标题】:Html.Encode vs Html.RawHtml.Encode 与 Html.Raw
【发布时间】:2022-11-29 23:10:03
【问题描述】:

在.NET framework 中HTMLEncode 会在视图文件中编码特殊字符(如匈牙利语、中文字母)并正确显示它们,而在.NET 6 中HTMLEncode 将它们显示为例如á

我正在使用 UTF-8 编码并且所有文件都正确设置为它。我查看了 Microsoft 文档,发现这些类来自不同的Assembly。我在这里错过了什么吗?

我的目标是不显示特殊字符。我知道HtmlRaw,但这是安全且最好的方式吗?

【问题讨论】:

    标签: .net razor encoding asp.net-core-mvc razor-pages


    【解决方案1】:

    默认情况下,非拉丁字符由 ASP.NET Core 中的 Razor 进行 HTML 编码。当您自己对它们使用 HTMLEncode 时,您基本上是对它们进行双重编码,以便它们呈现为编码版本。如果您将 Html.Raw 应用于双重编码结果,您只需反转您的 HTMLEncode 操作。

    简而言之,在 ASP.NET Core 中不需要 HTMLEncode 非拉丁字符,因为框架会为您完成。但是,您可能决定不喜欢 HTML 源代码中这些字符的 HTML 等价物,在这种情况下,您可以配置编码器选项以防止默认编码器执行它们所做的事情,并允许浏览器的 UTF-8 支持处理事情:

    builder.Services.Configure<WebEncoderOptions>(options =>
    {
        options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.BasicLatin, UnicodeRanges.Latin1Supplement);
    });
    

    请注意,无论您在此处设置什么,都会覆盖默认设置,这就是为什么您需要包含 BasicLatin 范围的原因。如果您不确定应该包含哪些字符集,可以在这里查看:http://www.unicode.org/charts/。或者,您可以简单地指定UnicodeRanges.All

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多