1

次の基本的なHTMLページがあるとしましょう

<html>
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>    
    <meta charset=utf-8 />
    <title>JS Bin</title>
  </head>
  <body>
    \u00f2
  </body>
</html>

ページがレンダリングされると、私が期待していたのに対して\u00f2が表示されます。そして、大きな「しかし」がやってくる。次のJavascriptコードで、私が見るのはò文字です(2秒後)。

$(function(){
  window.setTimeout(function(){
    $("body").html("\u00f2")},2000);
  });
});

私の質問は、なぜこれが起こっているのかということです。Unicodeコードポイントをレンダリングするのではなく、HTMLエンティティに変換して、正しい文字を直接レンダリングできることを認識しています。問題は学習目的のためです。

これがjsbinです

4

2 に答える 2

3

これは\u00f2、Unicode文字の有効なHTMLマークアップではないためです。適切なHTMLマークアップは&#x00f2です。あなたがする必要があるのはと交換\uすることだけで&#xあり、あなたは大丈夫なはずです。

jQueryがを使用する理由を知りたい場合\uは、javascriptが\u指定されたUnicode文字を使用するためです。詳細については、jquery .text()およびunicodeを参照してください。

つまり、\uJavascriptや&#xHTMLで使用し、それを切り替えようとしないでください。そうしないと、問題(ここで何が起こっているかなど)が発生します。

于 2012-12-10T02:14:19.023 に答える
3

これは、HTMLでは\u00f25文字のシーケンスであるために発生します。バックスラッシュ\は、HTMLでは特別な意味を持ちません。JavaScript文字列では、\ u00f2には特別な意味があります。これは、16進数の00f2を持つUnicodeコード単位、つまり文字「ò」を示します。

逆に、&#x00f2;HTMLで「ò」を表すために使用することはできますが、JavaScriptでそれを行うことはできません。ただし&#x00f2;、JavaScriptの観点からは8文字のシーケンスである)を「ò」に変換する関数を使用することはできます。さらに、JavaScriptコードがscript要素またはイベント属性のHTMLに埋め込まれているように見える場合、ブラウザーは、特定のルールに応じて&#x00f2;、JavaScriptインタープリターを呼び出す前に、最初にHTMLルールによって解釈する場合があります。

HTMLドキュメントでは、最新の一般的に推奨される方法は、UTF-8エンコーディングを使用して文字を直接入力することです。JavaScriptでも同じことができます。例:$("body").html("ò")},2000)ただし、これは、文字エンコードを指定する際の想定または実際の複雑さのために回避される場合があります。

于 2012-12-10T07:03:32.793 に答える