Αποτροπή ιαπωνικής εξόδου ως HTML από την πραγματική αναφορά συνθήκης (δείτε αριθμητικοί χαρακτήρες)

Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον

Οπτικό Στούντιο
  • Οπτικό Στούντιο 2019
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>

Από την πλευρά του προγράμματος, ορίστε τα Ιαπωνικά σε ΠροβολήData.

Index.cshtml.cs (για σελίδες ξυραφιών)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

.cs οικιακού ελέγχου (για MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Όταν τρέχω τον εντοπισμό σφαλμάτων, και τα δύο εμφανίζονται σωστά στα ιαπωνικά.

Ωστόσο, εάν κοιτάξετε την προέλευση της σελίδας σε ένα πρόγραμμα περιήγησης στο Web, μπορείτε να δείτε ότι η ιαπωνική έξοδος στο ViewData εξάγεται με μια πραγματική αναφορά (δείτε αριθμητικούς χαρακτήρες).

Μια αναφορά πραγματικού κόσμου (δείτε αριθμητικοί χαρακτήρες) είναι ένας αλφαριθμητικός εναλλακτικός χαρακτήρας που χρησιμοποιείται όταν θέλετε να αναπαραστήσετε χαρακτήρες Unicode σε ένα περιβάλλον που μπορεί μόνο να επεξεργαστεί αλφαριθμητικούς χαρακτήρες ή να εμφανίσει μόνο ορισμένες γλώσσες. Για παράδειγμα, το γράμμα "a" είναι "&#x3042;" στην πραγματική αναφορά κατάστασης (δείτε #x3042 χαρακτήρες). θα εμφανιστεί ως .

Ένα τυπικό πρόγραμμα περιήγησης στο Web κωδικοποιεί και εμφανίζει σωστά τους χαρακτήρες, ακόμα και αν το html περιέχει αναφορές στον πραγματικό κόσμο. Οι χρήστες συχνά δεν γνωρίζουν τις πραγματικές αναφορές κατάστασης.

Βασικά, εμφανίζεται σωστά σε ένα πρόγραμμα περιήγησης στο Web, οπότε δεν υπάρχει πρόβλημα όπως είναι. Δεδομένου ότι ο αριθμός των χαρακτήρων που παράγει αυξάνεται και είναι δύσκολο να διαβαστεί όταν κοιτάζετε 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 λόγο, ίσως θελήσετε να καθορίσετε .

Εάν το εκτελέσετε πραγματικά και το επιβεβαιώσετε, μπορείτε να δείτε ότι τα ιαπωνικά εξάγεται απευθείας χωρίς να αναφέρεται στην πραγματική κατάσταση.