<meta charset =“ utf-8”>と<meta http-equiv =“ Content-Type”>


1535

HTML5 Doctypeの文字セットを定義するには、どの表記法を使用すればよいですか?

  1. ショート:

    <meta charset="utf-8" /> 
  2. 長いです:

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

94
content-typeやencodingのようなものに<meta>タグを使用することは非常に皮肉なことです。これらのことを知らなければ、ファイルを解析してメタタグの値を取得することができなかったからです。
Mark

321
到達するまでASCIIとして解析できます。HTML5解析アルゴリズムはこれを考慮に入れます。
Quentin

41
ページがWeb経由で提供される場合、どちらも解析に使用されないことに注意してください。代わりに、HTTP Content-Type応答ヘッダーのものが使用されます。メタタグは、ページがローカルディスクファイルシステムから読み込まれる場合にのみ使用されます。
BalusC、2011年

38
meta要素は、特定の条件下でHTTPを介して使用されます(HTTPヘッダーにデータが存在しないことを含む)
Quentin

78
それが本当にエンコーディングを指定するためのものであるとき、それがcharsetという名前であることも皮肉なことです。(文字セットはUnicode、エンコーディングはUTF-8です)
Ryan

回答:


1084

HTML5では、これらは同等です。短い方を使用すると、覚えやすく入力しやすくなります。ブラウザのサポートは、下位互換性のために設計されているため、問題ありません。


23
ブラウザのサポートはどうですか?DOESの<meta charset='utf-8'>IE6で動作しますか?
–ŠimeVidas、2011

11
私の知る限り、そうです。
Quentin

4
@ŠimeVidasが言及したGoogle Codeページへの更新されたリンクは次のとおりです。IE 6、7、および8に関して、「IE以外のブラウザーでは、document.characterSetを使用できます。IEでは、document.getElementsByTagName( 'meta')[0] .charsetを使用できると思うかもしれませんが、これはIEが実際に使用しているエンコードではなく、指定した文字エンコードのみを返します。」
hotshot309

7
私はこのスレッドが古いことを知っていますが、gtmetrix.com / specify-a-character-set-early.html<meta>、IE8の先読みダウンローダーを無効にして文字読み込みを設定することを示しており、ページの読み込み時間に影響を与える可能性があります。ええ、そうです、IE8をドロップします。@MészárosLajosは数年後にここに戻ってきて、IE8をサポートするために私たちのボールを破壊することができます。;-)
erturne 2014年

3
今日、IE11に韓国語の記号が表示されないという問題がありました。長い構文を優先して短い構文を削除すると、問題が修正されました。これが何らかのサーバー設定によるものか、IE11と文字セットの問題なのかはわかりません。失敗した正確なシンボルの組み合わせはwasでした。
James Donnelly

250

メタ文字セット宣言の両方の形式は同等であり、ブラウザ間で同じように機能するはずです。ただし、Webファイルの文字セットをUTF-8として宣言する際に覚えておく必要があることがいくつかあります。

  1. UTF-8エンコーディングでファイル(複数可)を保存せずにバイトオーダーマーク(BOM)。
  2. (上記のように)メタ文字セットを使用してHTMLファイルのエンコーディングを宣言します。
  3. Webサーバーは、Content-Type HTTPヘッダーでUTF-8エンコーディングを宣言して、ファイルを提供する必要があります。

Apacheサーバーは、デフォルトでISO-8859-1のファイルを提供するように設定されているため、ファイルに次の行を追加する必要があり.htaccessます。

AddDefaultCharset UTF-8

これにより、Content-Type応答ヘッダーでUTF-8エンコーディングを宣言するファイルを提供するようにApacheが構成されますが、そもそもファイルはUTF-8(BOMなし)で保存する必要があります。

メモ帳では、BOMがないとファイルをUTF-8で保存できません。できる無料のエディタはNotepad ++です。プログラムメニューバーで、[エンコード]> [BOMなしのUTF-8でエンコード]を選択します。「エンコーディング> BOMなしのUTF-8に変換」を使用して、ファイルを開いてUTF-8で再保存することもできます。

Wikipediaバイトオーダーマーク(BOM)の詳細。


20
@CodeBoy 「BOMなしで保存する必要があります」と答えるように修正します。次のページには、「BOMを省略することが相互運用性にとって通常最善である」と記載されていますが、これはベストプラクティスを示していますが、要件ではありません。w3.org
Johann

3
IISでは、Web.Configで<globalization fileEncoding = "utf-8" responseEncoding = "utf-8" />を使用してHTTPヘッダーに文字セットを設定できます-<system.web>に追加
Chris Moschini

3
私が理解しているように、BOMなしで私たちと一緒に保存しても、それはまったく問題ではありません。
David天宇Wong

3
UTF-8 HTMLにはBOMがないはずです。BOMがあればうまくいくはずです。また、metaHTTPヘッダーは必要ありません。BOM metaまたはHTTPヘッダーのいずれかが必要です。
hsivonen 2013年

5
Summing up: don't use BOM for UTF-8これには同意できません。UTF-8のBOMは、エンコーディングタイプのシグナリングに非常に役立ちます。それ以外の場合は、この質問が参照するメタタグなどを推測または使用する必要があります。BOMのすばらしい点は、これがUnicode仕様の一部であるため、HTMLだけでなく、Unicodeでエンコードされたすべてのデータに使用できることです。私たちがすべきことは、どこでもBOMを使用し、レガシーソフトウェアを爆破させ、それらのバグを報告して修正することです。
Stijn de Witt 2015

82

短いコードを使用するもう1つの理由は、マークアップで文字セットを指定する他のインスタンスと一致するためです。例えば:

<script type="javascript" charset="UTF-8" src="/script.js"></script>

<p><a charset="UTF-8" href="http://example.com/">Example Site</a></p>

一貫性は、エラーを減らし、コードを読みやすくするのに役立ちます。

charset属性は大文字と小文字を区別しないことに注意してください。UTF-8またはutf-8を使用できますが、UTF-8はより明確で、より読みやすく、より正確です。

また、メタ文字セット属性またはページヘッダーでUTF-8以外の値を使用する理由はまったくありません。UTF-8は、1999年のHTML4以降のWebドキュメントのデフォルトのエンコーディングであり、最新のWebページを作成する唯一の実用的な方法です。

また、UTF-8でHTMLエンティティを使用しないでください。著作権記号のような文字は直接入力する必要があります。使用する必要があるエンティティは、5つの予約済みマークアップ文字(小なり、大なり、アンパサンド、プライム、ダブルプライム)のみです。エンティティにはHTMLパーサーが必要です。HTMLパーサーは常に使用するとは限りません。エラーが発生し、コードが読みにくくなり、ファイルサイズが大きくなり、使用したエンティティによっては、さまざまなブラウザーで正しくデコードされない場合があります。著作権、商標、オープンクォート、クローズクォート、アポストロフィ、エムダッシュ、エンダッシュ、箇条書き、ユーロ、およびコンテンツに含まれるその他の文字を入力/挿入する方法を学び、実際の文字をコードで使用します。Macには、キーボードシステム設定でオンにできるCharacter Viewerがあります。必要な文字を見つけてドラッグアンドドロップするか、対応するキーボードビューアを使用して入力するキーを確認できます。たとえば、商標はOption + 2です。UTF-8には、書かれたすべての人間の言語の文字と記号がすべて含まれています。したがって、emダッシュの代わりに-を使用する言い訳はありません。句読点やタイポグラフィのルールを学ぶことも悪い考えではありません。たとえば、ピリオドが引用符の内側ではなく外側にあることを知っているとします。

content-typeやencodingなどのタグを使用することは非常に皮肉なことです。これらのことを知らなければ、ファイルを解析してメタタグの値を取得することができなかったからです。

いいえ、そうではありません。ブラウザーは、ファイルの解析をブラウザーのデフォルトのエンコード(UTF-8またはISO-8859-1)として開始します。US-ASCIIはISO-8859-1 UTF-8 の両方のサブセットであるため、ブラウザーはどちらの方法でも問題なく読み取ることができます...同じです。ブラウザーがメタ文字セットタグを検出すると、エンコードがブラウザーが既に使用しているものと異なる場合、ブラウザーは指定されたエンコードでページをリロードします。そのため、メタ文字セットタグを先頭、headタグの直後、他の何よりも、タイトルまで配置します。これにより、タイトルにUTF-8文字を使用できます。

BOMなしのUTF-8エンコーディングでファイルを保存する必要があります

それは厳密には当てはまりません。ドキュメントにUS-ASCII文字しか含まれていない場合は、サブセットであるため、US-ASCIIとして保存し、UTF-8として提供できます。しかし、Unicode文字がある場合、それは正しいです。BOMなしでUTF-8として保存する必要があります。

ファイルをUTF-8で保存する優れたテキストエディターが必要な場合は、Notepad ++をお勧めします。

Macでは、Mac App StoreのBare Bones TextWrangler(無料)、またはMac App Storeにある$ 39.99のBare Bones BBEditを使用してください。どちらのアプリでも、ドキュメントウィンドウの下部にメニューがあり、ドキュメントのエンコードを指定できます。「UTF-8 no BOM」を簡単に選択できます。そしてもちろん、それをプリファレンスで新しいドキュメントのデフォルトとして設定できます。

ただし、WebサーバーがHTTPヘッダーでエンコードを提供する場合(推奨)、両方の[メタタグ]は不要です。

不正解です。もちろん、HTTPヘッダーでエンコードを設定する必要がありますが、ユーザーがページをブラウザーからローカルストレージに保存し、後で再度開くことができるように、メタ文字セット属性でもエンコードを設定する必要があります。存在するエンコーディングの唯一の指標は、メタ文字セット属性です。同じ理由でベースタグも設定する必要があります...サーバーではベースタグは不要ですが、ローカルストレージから開いた場合、ベースタグはページがサーバー上にあるかのように機能し、すべての配置されたアセットなど、リンク切れはありません。

AddDefaultCharset UTF-8

または、特定のファイルタイプのエンコーディングを次のように変更することもできます。

AddType text/html;charset=utf-8 html

UTF-8とLatin-1(ISO-8859-1)の両方のファイルを提供するためのヒントは、UTF-8ファイルに「テキスト」拡張子を付け、Latin-1ファイルに「txt」を付けることです。

AddType text/plain;charset=iso-8859-1 txt
AddType text/plain;charset=utf-8 text

最後に、レガシーDOSや(従来の)Macの行末ではなくUnixの行末でドキュメントを保存することを検討してください。これは役に立たず、害を及ぼす可能性があります。特に、これらのレガシーシステムから遠ざかるにつれ、最終的には低下します。有効なHTML5、UTF-8エンコーディング、およびUnixの行末を持つHTMLドキュメントは、よくできています。多くのコンテキストでそのドキュメントを共有、編集、保存、読み取り、回復し、依存することができます。それはリングアフランカです。デジタルペーパーです。


20
「ドキュメントにISO-8859-1文字しか含まれていない場合は、サブセットであるため、ISO-8859-1として保存してUTF-8として提供できます」-誤り。「ISO-8859-1」を「US-ASCII」に変更すれば正解です。US-ASCIIはサブセットであるためUTF-8と互換性がありますが、ISO-8859-1はそうではありません。ISO-8859-1(非ASCII文字を含む)をUTF-8に変換するには、非ASCII文字をエンコードする必要があります。ISO-8859-1のコードポイントはUnicodeにも存在しますが、UTF-8はUS-ASCII外のコードポイントをISO-8859-1とは異なる方法でエンコードします。
thomasrutter

2
HTMLエンティティについてのあなたのポイントは良いことです。過去には、エンティティを使用して、別のシステムに保存したり、別のエディタで開いたりした後に、UTF-8文字に変換されたことを発見しました。ただし、改行しないスペース(&nbsp;)を使用すると混乱を招く結果が生じる可能性があるので注意してください。通常、エディターには表示されないため、(私の経験では)わかりやすくするためにエンティティとして保持するのが通常最善です。
squidbe

"You should also set a base tag..."ここで説明する警告が付属しているはずです
マフバ

HTMLエンティティを好むもう1つの理由は、イオニコンのようなものを使用している場合です。&#xf101;デフォルトのグリフよりも、私が認識できない奇妙な文字よりも見たいです。
Daniel Lubarov、2015年

30

<meta charset="utf-8"> HTML5で導入されました。

ドキュメントで述べたように、どちらも有効です。ただし、これ<meta charset="utf-8">はHTML5専用です(入力が簡単で覚えやすい)。

近いうちに、古いスタイルは廃止される予定です。新品にこだわりたい<meta charset="utf-8">です。

方法は1つしかありませんが、上っています。技術の場合、それは古いものを段階的に廃止することです(本当に、本当に速い)

ドキュメント: HTMLメタ文字セット属性-W3Schools


2
リンクについては、meta.stackoverflow.com
questions / 280478 /

18

他の回答に異議を唱えることはしませんが、以下に言及する価値があると思います。

  1. 「長い」(http-equiv)表記と「短い」表記は、どちらが先に勝ったとしても同じです。
  2. Webサーバーのヘッダーはすべての<meta>タグを上書きします。
  3. BOM(バイトオーダーマーク)はすべてを上書き、多くの場合、それはhtml 4(およびおそらく他のもの)に影響します。
  4. エンコーディングを宣言しない場合、ブラウザで定義されている「フォールバックテキストエンコーディング」でテキストを取得する可能性があります。FirefoxでもChromeでも、utf-8ではありません。
  5. 他の手掛かりがない場合、ブラウザーはエンコードを取得するためにASCIIであるかのようにドキュメントを読み取ろうとするため、奇妙なエンコードは使用できません(ただし、BOMを使用したutf-16は実行する必要があります)。
  6. 仕様によると、エンコード宣言はドキュメントの最初の512バイト内にある必要がありますが、ほとんどのブラウザーはそれ以上の読み取りを試みます。

echo 'HTTP/1.1 200 OK\r\nContent-type: text/html; charset=windows-1251\r\n\r\n\xef\xbb\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500ブラウザでを実行してポイントすることでテストできますlocalhost:4500。(もちろん、パーツを変更または削除する必要があります。BOMパーツは\xef\xbb\xbfです。シェルのエンコードに注意してください。)

エンコードを明示的に宣言することが非常に重要であることを覚えておいてください。ブラウザに推測させると、セキュリティの問題につながる可能性があります。


1
良い点ですが、どのセキュリティ問題について言及しているのか詳しく説明できますか?
アームフット2016

1
長い表記は、短い表記を上書きするべきではありません。つまり、ドキュメントの最初の表記が優先されます。
gsnedders

1
@Armfoot以前は、UTF-7私の記憶に問題がありました。また、たとえば、画像をアップロードするときに、スクリプトコンテンツとして盗聴される何かをアップロードする場合など、Webでの盗聴は一般的に良くありません。
phk

@gsneddersはchromeとfirefoxでテストされたとおりです。それに応じて回答を編集しました。アームフット:それはいくつかの7ビッ​​トエンコーディングに関するものでした。
2016年

1
@CraigMcQueenは、ブラウザーのフォールバックが(2018年に)まだデフォルトで西ヨーロッパの西ヨーロッパに設定されていることを確認しています。ユーザーはフォールバックをutf-8に設定できますが、これは何千ものサイトが依然としてグリッチのある高バイトのASCII文字として使用しているすべてのくだらないエンコーディングを公開しているだけなので、まだ一般的ではありません。もっと残念だ。これがどのように変化するかは、ブラウザーベンダーからの少しの強制なしには理解できず、レガシー製品の破壊に熱心ではありません。
brennanyoung 2018

13

<meta charset="utf-8" />HTML5を使用するときにWebブラウザーで使用します。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />HTML4またはXHTMLを使用する場合、またはPHP DOMDocument5.3のような古いdomパーサーに使用する



1

メールに署名を埋め込むには、長いバージョンを使用します。

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

その理由は、多くの電子メールリーダーがhtml5を使用していないため、常に古いhtmlスタイルを使用するほうがよいからです。実際、divs + cssよりもテーブルを使用する方が良いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.