Förhindra japansk utdata som HTML från faktisk villkorsreferens (se numeriska tecken)

Datum för skapande av sida :

Miljö

Visuell studio
  • Visual Studio 2019
ASP.NET kärna
  • 3.1 (Rakbladssida, MVC)

Japanska dynamiskt ordnade i programmet matas ut som en referens till den faktiska situationen.

Index.cshtmlLåt oss visa de som angav japanska direkt i och de som matar ut japanska med ViewData enligt följande.

<!-- 省略 -->

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

På programsidan ställer du in japanska på ViewData.

Index.cshtml.cs (för Rakbladssidor)

// 省略

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 から日本語を表示させます。";
  }
}

När jag kör felsökning visas båda korrekt på japanska.

Men om du tittar på källan till sidan i en webbläsare kan du se att den japanska utdata i ViewData matas ut med en verklig referens (se numeriska tecken).

En verklig referens (se numeriska tecken) är ett alfanumeriskt alternativt tecken som används när du vill representera Unicode-tecken i en miljö som bara kan bearbeta alfanumeriska tecken eller bara visa vissa språk. Bokstaven "a" är till exempel "&#x3042;" i den faktiska situationsreferensen (se #x3042 tecken). Den visas som .

En typisk webbläsare kodar och visar tecken korrekt även om html innehåller verkliga referenser. Användare är ofta omedvetna om de faktiska situationsreferenserna.

I grund och botten visas det korrekt i en webbläsare, så det finns inga problem som det är. Eftersom antalet tecken utdata ökar och det är svårt att läsa när man tittar på HTML under utvecklingen, kan det matas ut på japanska som det är på följande sätt.

Förhindra att japanska skrivs ut med verkliga referenser (se numeriska tecken)

För att .cs bara till koden i filen enligt följande:

// 追加
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 I services.Configure<WebEncoderOptions> metoden anropar du metoden, options.TextEncoderSettings Ange TextEncoderSettings en förekomst av till .

Om du UnicodeRanges.All anger argumentet konverteras inte alla tecken till verkliga referenser och matas ut som de är.

Om du anger enskilda områden som du inte UnicodeRanges.All vill konvertera anger du ett eller flera andra värden. Men i princip, om du inte har en UnicodeRanges.All specifik anledning, kanske du vill ange .

Om du faktiskt kör det och bekräftar det kan du se att japanska matas ut direkt utan att hänvisa till den faktiska situationen.