在.NET框架中,HTMLEncode会在视图文件中对特殊字符(如匈牙利字母、中文字母)进行编码并正确显示,而在.NET 6中,HTMLEncode会将它们显示为á。
我正在使用UTF-8编码,所有文件都被正确地设置为它。我查看了微软的文档,我看到这些类来自不同的Assembly。我是不是漏掉了什么?
我的目标是显示没有特殊字符。我知道HtmlRaw,但是这是安全的,也是最好的方法吗?
发布于 2022-11-29 15:10:03
默认情况下,非拉丁字符是由ASP.NET核心中的Razor编码的.当您自己在它们上使用HTMLEncode时,您基本上是对它们进行双重编码,以便它们呈现为它们的编码版本。
简而言之,没有必要在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。
https://stackoverflow.com/questions/74612108
复制相似问题