为什么在视图中ASP.NET Core会将波斯(或阿拉伯)文本转换为字符引用(&#xhhhh;)

Sor*_*ren 3 asp.net asp.net-core-mvc asp.net-core asp.net-core-1.0

源代码:

@{ ViewBag.Title = "???? ????"; }

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>@ViewBag.Title</title>
</head>
<body>

    <div class="container" dir="rtl">
        @RenderBody()
    </div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

它在浏览器中很好地呈现,但是我想要html源中的相同文本(对于某些搜索引擎优化器软件)

阿拉伯文字中的ViewBag问题

并输出:

<!DOCTYPE html>
<html>
<head>
    <title>&#x633;&#x644;&#x627;&#x645; &#x639;&#x644;&#x6CC;&#x6A9;</title>
</head>
<body>
...
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

blo*_*art 7

因为默认情况下,HTML编码引擎将仅安全列出基本的拉丁字母(因为浏览器存在错误。因此,我们正努力防止出现未知问题)。您看到的&XXX值仍然可以如屏幕快照中所示正确显示,因此,除了增加页面大小外,没有任何实际危害。

如果增加的页面大小使您感到困扰,则可以自定义编码器以安全列出自己的字符页面(不是语言,Unicode不考虑语言术语)

为了扩大编码器认为安全的字符,可以将以下行插入startup.cs中的ConfigureServices()方法中;

services.AddSingleton<HtmlEncoder>( HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin, UnicodeRanges.Arabic }));

阿拉伯语在Unicode中有很多,因此您可能需要添加更多块才能获得所需的完整范围。