15

JavaScriptを使用してHTMLページのタイトルを設定しているときに、奇妙な動作が見られます。html文字参照をタイトルに直接挿入すると、Unicodeは正しくレンダリングされます。次に例を示します。

<title>&#21543;&#20986;</title>

しかし、JavaScriptを介してhtml文字参照を使用しようとすると、何かが&を(&amp;)に変換しているように見えます(SOがアンパサンドに戻らないようにそれらを分離しているため)。完全にコード化された文字列としてレンダリング:

function execTitleChange() {
  document.title = "&#21543;&#20986;";
}

(これは少し推測であることに注意してください。このJavaScript関数を実行した後にFirebugを使用してDOMをイントロスペクトすると、&の代わりに&が表示されます。)

JavaScriptから値を設定するときに\uエンコードされたUnicode文字を使用すると、すべてが再び正しく機能します。

function execTitleChange() {
  document.title = "\u5427\u51fa";
}

JavaScriptがUnicode文字を表す方法だと思うので、\ uエンコードされた文字が機能するという事実は私には理にかなっていますが、html文字参照を使用すると動作が異なる理由に困惑しています。

4

2 に答える 2

26

JavaScript文字列定数は、JavaScriptパーサーによって解析されます。HTMLタグ内のテキストは、HTMLパーサーによって解析されます。2つの言語(および拡張により、それらのパーサー)は異なり、特に文字コードで文字を表す方法が異なります。

したがって、あなたが発見したのは、現実が実際にどのようであるかです:-) \uJavaScriptでエスケープ表記を使用&#nnnn;し、HTML / XMLでHTMLエンティティ()を使用します。

編集— JavaScriptからHTMLを作成/挿入することについて話しているとき、状況はさらに混乱する可能性があります。JavaScriptからDOMを更新するために使用する場合.innerHTML、基本的には、解釈のためにHTMLソースコードをHTMLパーサーに渡します。そのため、JavaScript\uエスケープまたはHTMLエンティティのいずれかを使用でき、機能します(文字エンコードの不一致などの厄介な問題を除く)。

String.fromCharCode()最後に、JavaScriptには、数字の文字コードから文字列を作成する関数も用意されていることに注意してください。

于 2012-08-24T18:05:25.777 に答える
6

JavaScriptでUnicode文字を操作する最良の方法は、UTF-8エンコーディングで保存できるエディターまたはその他のツールを使用して、文字自体を使用することです。あなたは多くの混乱を避けるでしょう。当然、.jsまたは.htmlファイルの文字エンコードを適切に宣言する必要があります。

この構成&#21543;は、JavaScriptでは特別な意味はありません。たった8文字のASCII文字です。ただし、JavaScriptコードがHTMLドキュメントに埋め込まれている場合は、JavaScriptインタープリターに渡される前にHTMLルールによって処理されます。また、ルールはHTMLバージョンによって異なります。そのような構成を避けるさらに別の理由。

だからただ書く

document.title = "吧出";

(もちろん、title要素の内容を変更する必要がある状況はほとんどありません。これは、検索エンジンや他の多くの目的にとって重要ですが、HTMLで設定するのではなく、JavaScriptで変更する必要があります。しかしそれは重要ではありません。)

于 2012-08-24T19:32:52.293 に答える