جلوگیری از خروجی ژاپنی به عنوان HTML از مرجع شرایط واقعی (نگاه کنید به کاراکترهای عددی)

تاریخ ایجاد صفحه :

محیط

ویژوال استودیو
  • ویژوال استودیو ۲۰۱۹
ASP.NET هسته
  • 3.1 (صفحه تیغ، 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 (برای صفحات تیغ)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (برای MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

وقتی اشکال زدایی را اجرا می کنم، هر دو به زبان ژاپنی به درستی نمایش داده می شوند.

با این حال، اگر به منبع صفحه در یک مرورگر وب نگاه کنید، می بینید که خروجی ژاپنی در ViewData خروجی با یک مرجع دنیای واقعی است (به کاراکترهای عددی مراجعه کنید).

یک مرجع دنیای واقعی (کاراکترهای عددی را ببینید) یک کاراکتر جایگزین عددی آلفا است که زمانی استفاده می شود که می خواهید کاراکترهای یونیکد را در محیطی نمایندگی کنید که تنها می تواند کاراکترهای عددی آلفا را پردازش کند یا تنها زبان های خاصی را نمایش دهد. به عنوان مثال، حرف "a" "&#x3042;" در مرجع وضعیت واقعی است (به کاراکترهای #x3042 کنید). آن را به عنوان نمایش داده خواهد شد.

یک مرورگر وب معمولی حتی اگر html حاوی مراجع دنیای واقعی باشد، کاراکترها را به درستی کدگذاری و نمایش می دهد. کاربران اغلب از مراجع وضعیت واقعی بی اطلاع هستند.

اصولاً در یک مرورگر وب به درستی نمایش داده می شود، بنابراین مشکلی آنطور که هست وجود ندارد. از آنجا که تعداد کاراکترها خروجی افزایش می یابد و خواندن آن در هنگام نگاه کردن به HTML در طول توسعه دشوار است، می تواند خروجی به زبان ژاپنی باشد چرا که به شیوه زیر است.

جلوگیری از ژاپنی ها از چاپ با مراجع دنیای واقعی (نگاه کنید به شخصیت های عددی)

برای شروع.cs فقط کد را به فایل به صورت زیر اضافه کنید:

// 追加
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 در services.Configure<WebEncoderOptions> روش، روش را فراخوانی کنید، تعیین options.TextEncoderSettings TextEncoderSettings نمونه ای از به.

اگر استدلال را تنظیم کنید، تمام کاراکترها به مراجع دنیای واقعی تبدیل نمی شوند و همان طور که UnicodeRanges.All هست خروجی خواهند بود.

اگر محدوده های فردی را که نمی خواهید تبدیل کنید مشخص کنید، یک یا چند مقدار UnicodeRanges.All دیگر را مشخص می کنید. با این حال ، اساسا ، مگر اینکه شما یک دلیل خاص ، UnicodeRanges.All شما ممکن است بخواهید برای مشخص کردن.

اگر شما در واقع آن را اجرا و تایید آن، شما می توانید ببینید که ژاپنی خروجی به طور مستقیم بدون اشاره به وضعیت واقعی است.