在做.net core视图开发中发现所有的非英文字符都被转成了类似于美国的字符,虽然网页可以正常显示但感觉这会对搜索引擎不友好。于是开始查找解决方案。
先说下这种字符是什么。
有时会在HTML文档中看到形如:
∑
∑
∑
这样的字符序列,其实该序列是HTML/XML文档中的转义序列,它们都指代求和符号∑
这三种转义序列都称为character reference(字符引用)。
- 前两种称为numeric character reference (NCR—字符数值引用),数字取值为目标字符的Unicode code point,以
&#
开头的后接十进制数字,以&#x
开头的后接十六进制数字。 - 最后一种是character entity reference(字符实体引用),后接预先定义的实体名称。
解决方案:
1.在 Startup.cs 的 ConfigureServices() 方法中添加下面的一行代码:
services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));
2.直接配置services
services.Configure<WebEncoderOptions>(options =>
{
options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
});
3.也是配置services
services.Configure<WebEncoderOptions>(options =>
options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.BasicLatin,
UnicodeRanges.CjkUnifiedIdeographs));
造成这个问题的大致原因为DefaultHtmlEncoder在初始化时用了UnicodeRanges.BasicLatin,代码如下:
internal readonly static DefaultHtmlEncoder Singleton = new DefaultHtmlEncoder(new TextEncoderSettings(UnicodeRanges.BasicLatin));
github上此问题的链接:https://github.com/aspnet/HttpAbstractions/issues/315