2009-11-08 11 views
75

HTMLページにティック(✔)記号とクロス(✘)記号を表示するだけですが、それはボックスまたはグープのように表示されます - 明らかにエンコーディングと関係します。ユニコードのシンボルをHTMLで表示する

私はutf-8を表示するようにメタタグを設定しましたが、明らかに何か不足しています。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

編集/ソリューション: ":text/htmlでのContent-Type" ではなく、UTF-8のコメントから、放火犯を使用して、私は、ヘッダーが実際にあった私のページから渡されました。私のファイルが "BOMなしのUTF-8"としてフォーマットされていることが、Notepad ++を使用してファイル形式を調べています。これをUTF-8に変更すると、シンボルは正しく表示されますが、firebugはまだ同じcontent-typeを示すようです。

+1

+1非常に興味深い質問です! –

+1

ありがとう!それは私をたくさん助けました! –

答えて

42

HTTPサーバーのヘッダーが正しいことを確認する必要があります。特に

、ヘッダ:

Content-Type: text/html; charset=utf-8 

は存在すべきです。

HTTPヘッダーが存在する場合、ブラウザーはメタタグを無視します。

また、次のことを試してください/チェック、ファイルが実際にそれを提供する前にUTF-8としてエンコードされていることを確認してください。

  • あなたのエディタがUTF-8として保存し確認してください。
  • FTPやファイル転送プログラムがファイルを壊さないようにしてください。
  • &#uuu;のようなHTMLエンコードエンティティで試してください。
  • 実際には、ファイルを16進数でダンプし、文字として見てください。✔の場合、E2 9C 94でなければなりません。

注:システムでグリフ(文字を含むフォント)が見つからないユニコード文字を使用する場合は、ブラウザに疑問符や記号のようなブロックが表示されます。しかし、あなたのように複数のローマ字が見える場合、これはエンコーディングの問題を示します。

+0

実際には、メタタグは無視されませんが、HTTPヘッダーが優先されます。その精度のためにコンラッドに感謝します。 –

+5

CSS ':: before'セレクタの' content'プロパティにUnicode文字を使うには、バックスラッシュ表記を使う必要があることに注意してください。例: '&#2713'の代わりに '\ 2713'。 –

4

実際にファイルをUTF-8として保存してください。また、特殊文字としてHTMLエンティティ(&#nnn;)を使用してください。

+0

✔のHTMLエンティティは表示されませんか、それとも見逃しましたか?どのようにUTF-8としてファイルを「実際に」保存し、どのようにチェックできますか? –

+0

@Peter:適切なエディタを使用します。ほとんどのテキストエディタでは、ファイルのエンコーディングを指定するための「名前を付けて保存」ダイアログにオプションがあります。あるいは、メニューのどこかに別のオプションが隠されています。 Vimは 'fileencoding'設定を使います。 –

+8

@Peterでは、任意の文字をそのコードで参照できます。試してみる(&X)ダニのために。 –

3

Nicolasの提案とは異なり、metaタグは実際にはブラウザで無視されません。ただし、Content-Type HTTPヘッダーは、文書内のmetaタグの存在より常に優先されます。

したがって、HTTPヘッダー経由で正しいエンコーディングを送信するか、このHTTPヘッダーをまったく送信しないでください(推奨しません)。 metaタグは、主に、HTTPトラフィック経由で送信されないローカルドキュメントのフォールバックオプションです。

HTMLエンティティを使用することも、実際の問題を回避するための回避策と考えるべきです。 Webサーバーを適切に構成することで、多くの迷惑を防ぐことができます。

0

私はこれがファイルの問題だと思うので、ファイルをlatin-1のような1バイトのエンコーディングで簡単に保存しました。あなたのエディタをアップグレードし、ファイルをutf-8に設定する方法。

なぜutf-8にデフォルトでないエディタがあるのだろうと思います。

14

私は答えが既に受け入れられていることを知っていますが、いくつかのことを指摘したいと思います。

content-typecharsetを設定することは、アプリケーション全体の一貫性を保証するため、サーバー上で行う方がはるかに優れていることは明らかです。

ただし、アプリケーションの言語がUTF-8文字セットでのみ使用可能な文字を多く使用している場合にのみ、UTF-8を使用します。いずれかのケースでユニコードの文字や記号を表示する場合は、ページのcharsetを変更せずに表示できます。

HTMLレンダラーは、に記号が記載されている限り、ページのエンコード文字セットの一部ではないシンボルを常に表示できました。奇妙に聞こえるが、その真実。

だから、あなたのhtmlは、それがansiまたはiso文字セットのいずれかのエンコーディングを持っていると述べヘッダを持っている場合でも、あなたは小数で、そのHTMLの文字参照を使用して、チェックマークを表示することができます - &#10003;または16進数です。&#x2713;

あなたのページでこの問題に直面している理由を理解するのが少し難しいです。 NCRの値が正しいかどうかを調べることができます。これは良い参考情報です。http://www.fileformat.info/info/unicode/char/2713/index.htm

+3

"しかし、アプリケーションの言語がUTF-8文字セットでのみ使用可能な文字を多く使用する場合は、UTF-8を使用します。なぜですか?切り替え時の不利な点は何ですか? – dumbledad

+2

@dumbledad:非常に良い質問、私は自分のバイアスを雲にしてみようと思う。私が言っていたことは、あなたのアプリケーション全体がすでにutf-8ではない場合でした。アプリケーションページを変更すると、1ページ分の作業が多すぎるかもしれません。また、あなたのプログラミング言語とコンテンツがutf-8文字を必要としない場合は、あなたのエディタがうまくいく(utf-8モードからの)迷惑な文字を間違って貼り付けることができます。あなたができるときは、エンコーディングと文字セットを更新する – Akshay

関連する問題