Zabránit japonskému výstupu jako HTML z odkazu na skutečnou podmínku (viz číselné znaky)

Datum vytvoření stránky :

Prostředí

Visual Studio
  • Visual Studio 2019
ASP.NET jádro
  • 3.1 (Stránka břitvy, MVC)

Japonská dynamicky uspořádaná v programu je výstupem jako odkaz na skutečnou situaci.

Index.cshtmlPodívejme se na ty, které zadaly japonštinu přímo do, a ty, které vysílá japonštinu pomocí ViewData, následujícím způsobem.

<!-- 省略 -->

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

Na straně programu nastavte japonštinu na ViewData.

Index.cshtml.cs (pro stránky Razor)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (pro MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Při spuštění ladění jsou obě zobrazeny správně v japonštině.

Pokud se však podíváte na zdroj stránky ve webovém prohlížeči, uvidíte, že japonský výstup v ViewData je výstup s odkazem v reálném světě (viz číselné znaky).

Odkaz v reálném světě (viz číselné znaky) je alfanumerický alternativní znak používaný v případě, že chcete reprezentovat znaky Unicode v prostředí, které může zpracovávat pouze alfanumerické znaky nebo zobrazovat pouze určité jazyky. Například písmeno "a" je "&#x3042;" v odkazu na skutečnou situaci (viz #x3042 znaků). zobrazí se jako .

Typický webový prohlížeč kóduje a zobrazuje znaky správně, i když html obsahuje odkazy v reálném světě. Uživatelé často nevědí o skutečných odkazech na situaci.

V podstatě je zobrazen správně ve webovém prohlížeči, takže není problém tak, jak je. Vzhledem k tomu, že se zvyšuje počet znaků výstupu a je obtížné číst při pohledu na HTML během vývoje, může to být výstup v japonštině, protože je to následujícím způsobem.

Zabránit tisku japonštiny s odkazy v reálném světě (viz číselné znaky)

Chcete.cs stačí přidat kód do souboru následujícím způsobem:

// 追加
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 V services.Configure<WebEncoderOptions> metodě volejte metodu, options.TextEncoderSettings Nastavte TextEncoderSettings instanci aplikace .

Pokud nastavíte UnicodeRanges.All argument, nebudou všechny znaky převedeny na odkazy v reálném světě a budou vysílají tak, jak jsou.

Pokud zadáte jednotlivé oblasti, které nechcete UnicodeRanges.All převést, zadáte jednu nebo více dalších hodnot. V podstatě však, pokud nemáte konkrétní UnicodeRanges.All důvod, můžete chtít zadat .

Pokud jej skutečně spusťte a potvrdíte, můžete vidět, že japonština je výstupem přímo bez odkazu na skutečnou situaci.