หลีกเลี่ยงการใช้ภาษาญี่ปุ่นที่ส่งออกเป็น HTML เป็นข้อมูลอ้างอิงจริง (การอ้างอิงอักขระตัวเลข)

วันที่สร้างเพจ :

สิ่งแวดล้อม

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1 (หน้า Razor, MVC)

ภาษาญี่ปุ่นที่จัดเรียงแบบไดนามิกในโปรแกรมเป็นผลลัพธ์อ้างอิงจริง

แสดง Index.cshtml สิ่งที่ป้อนภาษาญี่ปุ่นโดยตรงใน และเอาต์พุตภาษาญี่ปุ่นที่ใช้เอาต์พุต ViewData ดังที่แสดงด้านล่าง

<!-- 省略 -->

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

ในด้านโปรแกรม ให้ตั้งค่า ViewData เป็นภาษาญี่ปุ่น

Index.cshtml .cs ( สําหรับหน้า Razor)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

โฮมคอนทโรล.cs ( สําหรับ MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

เมื่อฉันเรียกใช้การดีบักทั้งสองจะแสดงภาษาญี่ปุ่นอย่างถูกต้อง

อย่างไรก็ตาม เมื่อคุณดูแหล่งที่มาของเพจในเว็บเบราว์เซอร์ คุณจะพบว่าภาษาญี่ปุ่นของผลลัพธ์ ViewData เป็นการอ้างอิงที่แท้จริง (ดูอักขระตัวเลข)

การอ้างอิงจริง (การอ้างอิงอักขระตัวเลข) เป็นอักขระสํารองที่เป็นตัวอักษรและตัวเลขที่แสดงถึงอักขระ Unicode ในสภาพแวดล้อมที่จัดการเฉพาะตัวอักษรและตัวเลขหรือแสดงเฉพาะภาษาที่ระบุเท่านั้น ตัวอย่างเช่น ในการอ้างอิงสถานะจริง (ดูอักขระตัวเลข) "a" #x3042&" แสดงเป็น

เว็บเบราว์เซอร์ทั่วไปจะเข้ารหัสและแสดงอักขระอย่างถูกต้อง แม้ว่า HTML จะมีการอ้างอิงจริง ผู้ใช้มักจะไม่ทราบการอ้างอิงที่แท้จริง

โดยทั่วไปจะแสดงอย่างถูกต้องในเว็บเบราเซอร์ดังนั้นจึงไม่มีปัญหา จํานวนอักขระที่ส่งออกเพิ่มขึ้นและยากที่จะอ่านเมื่อดู HTML ขณะพัฒนา เพื่อให้คุณสามารถส่งออกเป็นภาษาญี่ปุ่นได้ดังนี้

ป้องกันไม่ให้ผลลัพธ์ภาษาญี่ปุ่นเป็นข้อมูลอ้างอิงจริง (ดูอักขระตัวเลข)

เพียง.csรหัสสําหรับไฟล์ Startup เป็นดังนี้:

// 追加
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.ConfigureServicesservices.Configure<WebEncoderOptions>เรียกวิธีการในวิธีการ และจากนั้น คลิก options.TextEncoderSettings TextEncoderSettings ตั้งค่าอินสแตนซ์ของ

เมื่อคุณ UnicodeRanges.All ตั้งค่าเป็นพารามิเตอร์ อักขระทั้งหมดจะถูกแสดงตามที่เป็นอยู่ แทนที่จะแปลงเป็นการอ้างอิงจริง

ถ้าคุณต้องการระบุช่วงที่ไม่แปลงแยกต่างหาก UnicodeRanges.All ให้ระบุค่าที่ไม่ใช่ค่าอย่างน้อยหนึ่งช่วง อย่างไรก็ตาม โดยทั่วไป คุณสามารถระบุได้ UnicodeRanges.All เว้นแต่มีเหตุผลพิเศษ

เมื่อรันและยืนยันจริง คุณจะเห็นผลลัพธ์โดยตรงของภาษาญี่ปุ่นแทนการอ้างอิงจริง