Estä japaninkielinen tulostus HTML-muodossa todellisesta ehdosta (katso numeeriset merkit)

Sivun luontipäivämäärä :

Ympäristö

Visuaalinen studio
  • Visual Studio 2019
ASP.NET ydin
  • 3.1 (Partaveitsisivu, MVC)

Ohjelmassa dynaamisesti järjestetty japanilainen tulostetaan viittauksena todelliseen tilanteeseen.

Index.cshtmlNäytetään japanin syöttäneet japani suoraan ja japaninkieliset japaninkieliset tiedot ViewDatan avulla seuraavasti.

<!-- 省略 -->

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

Määritä ohjelman puolella japaniksi ViewData.

Index.cshtml.cs (Razor-sivuille)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (MVC: lle)

// 省略

public class HomeController : Controller
{
  // 省略

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

Kun suoritan virheenkorjauksen, molemmat näkyvät japaniksi oikein.

Jos kuitenkin tarkastelet sivun lähdettä Web-selaimessa, näet, että ViewDatan japanilainen tuloste tuloste on tulostettu reaalimaailman viittauksella (katso numeeriset merkit).

Reaalimaailman viittaus (katso numeeriset merkit) on aakkosnumeerinen vaihtoehtoinen merkki, jota käytetään, kun haluat edustaa Unicode-merkkejä ympäristössä, joka voi käsitellä vain aakkosnumeerisia merkkejä tai näyttää vain tiettyjä kieliä. Esimerkiksi kirjain "a" on "&#x3042;" todellisessa tilanneviitteessä (katso #x3042 merkeistä). se näkyy nimellä .

Tyypillinen Web-selain koodaa ja näyttää merkit oikein, vaikka html-koodi sisältää reaalimaailman viittauksia. Käyttäjät ovat usein tietämättömiä todellisista tilanneviittauksista.

Pohjimmiltaan se näkyy oikein Web-selaimessa, joten ongelmaa ei ole. Koska merkkien tulosteen määrä kasvaa ja html-koodia on vaikea lukea kehityksen aikana, se voidaan tulostaa japaniksi, kuten se on seuraavalla tavalla.

Japaninkielisten tekstien tulostamisen estäminen reaalimaailman viittauksilla (katso numeeriset merkit)

Aloita .cs lisää koodi tiedostoon seuraavasti:

// 追加
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 Kutsu services.Configure<WebEncoderOptions> menetelmässä menetelmää, options.TextEncoderSettings Määritä TextEncoderSettings esiintymäksi .

Jos määrität UnicodeRanges.All argumentin, kaikkia merkkejä ei muunneta reaalimaailman viittauksiksi, vaan ne tulostuvat sellaisenaan.

Jos määrität yksittäisiä alueita, joita et UnicodeRanges.All halua muuntaa, määrität yhden tai useita muita arvoja. Periaatteessa, ellei sinulla ole tiettyä UnicodeRanges.All syytä, haluat ehkä määrittää .

Jos todella suoritat sen ja vahvistat sen, voit nähdä, että japanilainen tuloste on suoraan viittaamatta todelliseen tilanteeseen.