Asp.net

為什麼 ASP.NET Core 在視圖中將波斯語(或阿拉伯語)文本轉換為字元引用 (&#xhhhh;)

  • August 29, 2018

原始碼:

@{ 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>

它在瀏覽器中呈現得很好,但我想要 html 原始碼中的相同文本(對於某些搜尋引擎優化器軟體)

阿拉伯語文本中的 ViewBag 問題

和輸出:

<!DOCTYPE html>
<html>
<head>
   <title>سلام علیک</title>
</head>
<body>
...
</body>
</html>

因為,預設情況下,HTML 編碼引擎只會將基本的拉丁字母列入安全列表(因為瀏覽器有錯誤。所以我們試圖防止未知問題)。您看到的 &XXX 值仍然像您在螢幕截圖中看到的一樣正確呈現,因此除了增加的頁面大小之外沒有真正的危害。

如果增加的頁面大小困擾您,那麼您可以自定義編碼器以安全列出您自己的字元頁面(不是語言,Unicode 不考慮語言)

要加寬被編碼器視為安全的字元,您可以在 startup.cs 的 ConfigureServices() 方法中插入以下行;

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

阿拉伯語在 Unicode 中有很多塊,因此您可能需要添加更多塊才能獲得所需的全部範圍。

引用自:https://stackoverflow.com/questions/40232952