避免輸出為 HTML 的日語為實際參考 (數字字元參照)

頁面創建日期 :

環境

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1 (Razor 頁面, MVC)

在程式中動態排列的日語作為實際參考輸出

顯示 Index.cshtml 直接在 中輸入日語的內容,以及使用 ViewData 輸出的日語輸出,如下所示。

<!-- 省略 -->

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<p>ここに固定文字列の日本語を表示させます。</p>
<p>@ViewData["Message"]</p>

在程式端,將ViewData設置為日語。

Index.cshtml.cs( 對於 Razor 頁面 )

// 省略

public class IndexModel : PageModel
{
  // 省略

  public void OnGet()
  {
    ViewData["Message"] = "ViewData から日本語を表示させます。";
  }
}

HomeController.cs( 對於 MVC)

// 省略

public class HomeController : Controller
{
  // 省略

  public IActionResult Index()
  {
    ViewData["Message"] = "ViewData から日本語を表示させます。";
  }
}

當我運行調試時,兩者都正確顯示日語。

但是,當您在 Web 瀏覽器中查看頁面源時,您會發現 ViewData 輸出的日語是實際引用(請參閱數位字元)。

實際引用(數位字元引用)是一種字母數位替代字元,用於在只能處理字母數位或只能顯示特定語言的環境中表示 Unicode 字元。 例如,在實際狀態參考(請參閱數位字元)中,"a"一#x3042&"。 顯示為 。

典型的 Web 瀏覽器正確編碼和顯示字元,即使 HTML 包含實際引用。 使用者通常沒有意識到實際引用。

基本上,它在Web瀏覽器中正確顯示,因此沒有問題, 輸出的字元數增加,在開發時檢視 HTML 時難以閱讀,因此您可以透過以下方式以日語輸出:

防止日語輸出為實際參考(請參閱數位字元)

只需.cs Startup 檔案的代碼,如下所示:

// 追加
using Microsoft.Extensions.WebEncoders;
using System.Text.Encodings.Web;
using System.Text.Unicode;

// 省略

public class Startup
{
  // 省略

  // このメソッドはランタイムによって呼び出されます。 このメソッドを使用して、コンテナーにサービスを追加します。
  public void ConfigureServices(IServiceCollection services)
  {
    // 省略

    // 全ての文字をが実態参照で出力されないようにする
    // 全てではなく特定の範囲のみをエンコードさせたくない場合は UnicodeRanges.All のプロパティを個別に設定します。
    services.Configure<WebEncoderOptions>(options =>
    {
      options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);

      // 個別に設定する場合 (例)
      //options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.Hiragana, UnicodeRanges.Katakana);
    });
  }

  // 省略
}

Startup.ConfigureServicesservices.Configure<WebEncoderOptions> 方法中調用方法,然後單擊 options.TextEncoderSettings TextEncoderSettings 設置的實例。

UnicodeRanges.All 設置到參數中時,所有字元將按原樣輸出,而不是轉換為實際引用。

如果要單獨指定不轉換的範圍, UnicodeRanges.All 則指定一個或多個非值。 但是,基本上,除非有特殊原因 UnicodeRanges.All ,否則可以指定 。

實際運行和確認時,您會看到日語直接輸出,而不是實際參考。