Zapobieganie japońskiemu wyjściu jako HTML z rzeczywistego odwołania do warunku (patrz znaki liczbowe)

Data utworzenia strony :

Środowiska

Visual Studio
  • Visual Studio 2019
Rdzeń ASP.NET
  • 3.1 (strona razor, MVC)

Japoński dynamicznie rozmieszczone w programie jest dane wyjściowe jako odniesienie do rzeczywistej sytuacji.

Index.cshtmlWyświetlmy te, które wprowadziły japoński bezpośrednio do i te, które wyprowadzają japoński przy użyciu ViewData w następujący sposób.

<!-- 省略 -->

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

Po stronie programu ustaw japoński viewdata.

Index.cshtml.cs (dla stron Razor)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (dla MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Po uruchomieniu debugowania oba są wyświetlane poprawnie w języku japońskim.

Jeśli jednak spojrzysz na źródło strony w przeglądarce sieci Web, zobaczysz, że dane wyjściowe języka Japoński w viewdata są wyprowadzane z odniesieniem do rzeczywistych (patrz znaki liczbowe).

Odniesienie do rzeczywistości (patrz znaki liczbowe) jest alfanumerycznym alternatywnym znakiem używanym, gdy chcesz reprezentować znaki Unicode w środowisku, które może przetwarzać tylko znaki alfanumeryczne lub wyświetlać tylko niektóre języki. Na przykład litera "a" to "&#x3042;" w rzeczywistym odwołaniu do sytuacji (patrz #x3042 znaków). zostanie wyświetlony jako .

Typowa przeglądarka sieci Web poprawnie koduje i wyświetla znaki, nawet jeśli html zawiera rzeczywiste odniesienia. Użytkownicy często nie są świadomi rzeczywistych odwołań do sytuacji.

Zasadniczo jest wyświetlany poprawnie w przeglądarce internetowej, więc nie ma problemu, jak to jest. Ponieważ liczba znaków wyjściowych wzrasta i trudno jest odczytać, patrząc na HTML podczas rozwoju, może być dane wyjściowe w języku japońskim, jak to jest w następujący sposób.

Zapobieganie drukowaniu języka japońskiego z rzeczywistymi odniesieniami (patrz znaki liczbowe)

Aby rozpocząć.cs wystarczy dodać kod do pliku w następujący sposób:

// 追加
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.ConfigureServices W services.Configure<WebEncoderOptions> metodzie, wywołać metodę, options.TextEncoderSettings Ustaw TextEncoderSettings wystąpienie na .

Jeśli ustawisz UnicodeRanges.All argument, wszystkie znaki nie zostaną przekonwertowane na odniesienia w świecie rzeczywistym i będą wyprowadzane w stanie, w jakim jest.

Jeśli określisz poszczególne zakresy, których nie chcesz UnicodeRanges.All konwertować, określisz jedną lub więcej innych wartości. Jednak zasadniczo, chyba że masz konkretny UnicodeRanges.All powód, możesz określić .

Jeśli rzeczywiście uruchomić go i potwierdzić, widać, że japoński jest dane wyjściowe bezpośrednio bez odwoływania się do rzeczywistej sytuacji.