Voorkomen dat Japanse uitvoer als HTML de werkelijke voorwaardeverwijzing bevat (zie numerieke tekens)

Aanmaakdatum van pagina :

Milieu

Visuele studio
  • Visuele Studio 2019
ASP.NET Kern
  • 3.1 (De pagina van het scheermes, MVC)

Japans dynamisch gerangschikt in het programma is uitvoer als een verwijzing naar de werkelijke situatie.

Index.cshtmlLaten we de personen weergeven die rechtstreeks Japans zijn ingevoerd in en degenen die Japans uitvoeren met ViewData als volgt.

<!-- 省略 -->

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

Stel aan de programmazijde Japans in op ViewData.

Index.cshtml.cs (voor Razor pagina's)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (voor MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Wanneer ik foutopsporing uitvoert, worden beide correct weergegeven in het Japans.

Als u echter naar de bron van de pagina in een webbrowser kijkt, kunt u zien dat de Japanse uitvoer in ViewData wordt uitgevoerd met een verwijzing in de echte wereld (zie numerieke tekens).

Een verwijzing in de echte wereld (zie numerieke tekens) is een alfanumeriek alternatief teken dat wordt gebruikt wanneer u Unicode-tekens wilt weergeven in een omgeving die alleen alfanumerieke tekens kan verwerken of alleen bepaalde talen kan weergeven. De letter "a" is bijvoorbeeld "&#x3042;" in de werkelijke situatieverwijzing (zie #x3042 tekens). het wordt weergegeven als .

Een typische webbrowser codeert en geeft tekens correct weer, zelfs als html verwijzingen uit de echte wereld bevat. Gebruikers zijn zich vaak niet bewust van de werkelijke situatiereferenties.

Kortom, het wordt correct weergegeven in een webbrowser, dus er is geen probleem zoals het is. Omdat het aantal tekens de uitvoer toeneemt en het moeilijk is om te lezen wanneer u html bekijkt tijdens de ontwikkeling, kan het op de volgende manier in het Japans worden uitgevoerd.

Voorkomen dat Japans wordt afgedrukt met verwijzingen uit de echte wereld (zie numerieke tekens)

Om te beginnen.cs voeg je de code als volgt toe aan het bestand:

// 追加
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 Roep in de services.Configure<WebEncoderOptions> methode de methode aan, options.TextEncoderSettings Stel TextEncoderSettings een instantie in op .

Als u UnicodeRanges.All het argument instelt, worden niet alle tekens geconverteerd naar verwijzingen in de echte wereld en worden ze uitgevoerd zoals ze zijn.

Als u afzonderlijke bereiken opgeeft die u niet UnicodeRanges.All wilt converteren, geeft u een of meer andere waarden op. In principe, tenzij u een specifieke UnicodeRanges.All reden hebt, kunt u opgeven .

Als u het daadwerkelijk uitvoert en bevestigt, kunt u zien dat Japans rechtstreeks wordt uitgevoerd zonder te verwijzen naar de werkelijke situatie.