Verhindern der japanischen Ausgabe als HTML aus der istigen Bedingungsreferenz (siehe numerische Zeichen)

Erstellungsdatum der Seite :

Umgebung

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1 (Razor-Seite, MVC)

Japanisch dynamisch im Programm angeordnet wird als Verweis auf die tatsächliche Situation ausgegeben.

Index.cshtmlLassen Sie uns diejenigen anzeigen, die Japanisch direkt eingegeben haben, und diejenigen, die Japanisch mit ViewData wie folgt ausgeben.

<!-- 省略 -->

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

Legen Sie auf programmer Seite Japanisch auf ViewData fest.

Index.cshtml.cs (für Razor-Seiten)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (für MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Wenn ich das Debuggen ausführe, werden beide korrekt auf Japanisch angezeigt.

Wenn Sie sich jedoch die Quelle der Seite in einem Webbrowser ansehen, können Sie sehen, dass die japanische Ausgabe in ViewData mit einem realen Verweis ausgegeben wird (siehe numerische Zeichen).

Ein realer Verweis (siehe numerische Zeichen) ist ein alphanumerisches alternativzeichen, das verwendet wird, wenn Sie Unicode-Zeichen in einer Umgebung darstellen möchten, die nur alphanumerische Zeichen verarbeiten oder nur bestimmte Sprachen anzeigen kann. Der Buchstabe "a" ist z. B. "&#x3042;" in der tatsächlichen Situationsreferenz (siehe #x3042 Zeichen). es wird als angezeigt.

Ein typischer Webbrowser kodiert und zeigt Zeichen korrekt an, auch wenn HTML reale Referenzen enthält. Benutzer sind sich der tatsächlichen Situationsreferenzen oft nicht bewusst.

Grundsätzlich wird es in einem Webbrowser korrekt angezeigt, so dass es kein Problem gibt, wie es ist. Da die Anzahl der Zeichen, die ausgegeben werden, zunimmt und es schwierig ist, HTML während der Entwicklung zu lesen, kann es auf Japanisch ausgegeben werden, wie es in der folgenden Weise ist.

Verhindern, dass Japanisch mit realen Referenzen gedruckt wird (siehe numerische Zeichen)

Um zu starten.cs fügen Sie der Datei einfach wie folgt den Code hinzu:

// 追加
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 Rufen Sie in der services.Configure<WebEncoderOptions> Methode die Methode auf, options.TextEncoderSettings Legen Sie TextEncoderSettings eine Instanz von auf fest.

Wenn Sie UnicodeRanges.All das Argument festlegen, werden nicht alle Zeichen in reale Referenzen konvertiert und so ausgegeben, wie es ist.

Wenn Sie einzelne Bereiche angeben, die Sie nicht UnicodeRanges.All konvertieren möchten, geben Sie einen oder mehrere andere Werte an. Grundsätzlich können Sie jedoch angeben, dass, sofern Sie keinen bestimmten UnicodeRanges.All Grund haben, angeben möchten.

Wenn Sie es tatsächlich ausführen und bestätigen, können Sie sehen, dass Japanisch direkt ausgegeben wird, ohne sich auf die tatsächliche Situation zu beziehen.