Halang output Jepun sebagai HTML daripada rujukan keadaan sebenar (lihat aksara angka)

Tarikh penciptaan halaman :

Persekitaran

Visual Studio
  • Studio Visual 2019
ASP.NET Teras
  • 3.1 (Laman Cukur, MVC)

Jepun yang disusun secara dinamik dalam program ini adalah output sebagai rujukan kepada situasi sebenar.

Index.cshtmlMari kita paparkan orang-orang yang memasuki Jepun terus ke dalam dan orang-orang yang output Jepun menggunakan ViewData seperti berikut.

<!-- 省略 -->

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

Di sisi program, tetapkan Jepun ke ViewData.

Index.cshtml.cs (untuk halaman Cukur)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (untuk MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Apabila saya menjalankan penyahpepijatan, kedua-duanya dipaparkan dalam bahasa Jepun dengan betul.

Walau bagaimanapun, jika anda melihat sumber halaman dalam pelayar Web, anda dapat melihat bahawa output Jepun dalam ViewData adalah output dengan rujukan dunia sebenar (lihat aksara angka).

Rujukan dunia nyata (lihat aksara angka) adalah watak alternatif abjad angka yang digunakan apabila anda ingin mewakili aksara Unicode dalam persekitaran yang hanya boleh memproses aksara abjad angka atau memaparkan hanya bahasa tertentu. Sebagai contoh, huruf "a" adalah "&#x3042;" dalam rujukan situasi sebenar (lihat #x3042 aksara). ia akan dipaparkan sebagai .

Pengekodan pelayar Web biasa dan memaparkan aksara dengan betul walaupun html mengandungi rujukan dunia nyata. Pengguna sering tidak menyedari rujukan situasi sebenar.

Pada asasnya, ia dipaparkan dengan betul dalam pelayar Web, jadi tidak ada masalah seperti itu. Oleh kerana bilangan aksara output meningkat dan sukar untuk dibaca apabila melihat HTML semasa pembangunan, ia boleh menjadi output dalam bahasa Jepun kerana ia adalah dengan cara berikut.

Halang Jepun daripada dicetak dengan rujukan dunia nyata (lihat aksara angka)

Untuk memulakan.cs hanya tambah kod ke fail seperti berikut:

// 追加
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 Dalam services.Configure<WebEncoderOptions> kaedah ini, panggil kaedah, options.TextEncoderSettings Tetapkan TextEncoderSettings contoh kepada .

Jika anda UnicodeRanges.All menetapkan hujah, semua aksara tidak akan ditukar kepada rujukan dunia nyata dan akan menjadi output seperti mana.

Jika anda menentukan julat individu yang anda tidak mahu UnicodeRanges.All tukar, anda akan menentukan satu atau lebih nilai lain. Walau bagaimanapun, pada dasarnya, melainkan UnicodeRanges.All jika anda mempunyai sebab tertentu, anda mungkin mahu menentukan .

Jika anda benar-benar menjalankannya dan mengesahkannya, anda dapat melihat bahawa Jepun adalah output secara langsung tanpa merujuk kepada keadaan sebenar.