html 5ページエンコーディング
4803 ワード
どのようにしてページのエンコードを指定しますか?ブラウザがどのようにコードを認識しているか知っていますか.
まず、簡単な例として、各ブラウザの下でどのような違いがあるかを簡単なHTMLページで見てみましょう.
最も簡単なHTML、
エクスプローラ
ひょうじコーディング
コメント
IE6
UTF-8
IE8
UTF-8
IE9
GB2312
システムデフォルト文字セット
Firefox3.5
GBK2312
システムデフォルト文字セット
Firefox4.0
ISO-8859-1
西欧言語、英語のデフォルトコード
Chrome
GBK
システムデフォルト文字セット
Opera
中国語-自動検出
GB 2312でもあるはず
表から分かるように,符号化を宣言する手段がないページについては,各ブラウザで異なる解析がある.もちろん最も簡単なページでは,どんな符号化(もちろんASCIIのスーパーセットが前提)を用いても影響はないが,符号化の正確な設定の重要性を示すに足る.
エンコーディング宣言
HTML 4とHTML 5は、それぞれ1つの章を用いて宣言を符号化する方法を採用しており、ここをクリックしてHTML 4の関連章を表示したり、ここをクリックしてHTML 5の関連章を表示したりすることができます.
本文の出典:http://www.otakustay.com/learning-html5-charset
まず、コードとは何ですか.符号化とは、特定の方法によって、ブラウザ(またはユーザエージェント)が特定のアルゴリズムでバイトストリームを解析し、本当に正しいコンテンツを得ることを指定することである.HTMLの標準では、符号化は別名で表すことができます.エンコードの別名はIANAの定義に由来し、このリストに表示されるエンコードのみがブラウザによって識別される.したがって、UTF-8をUTF 8と書くと、ブラウザが全く相手にしない可能性があります.また、符号化別名は大文字小文字に敏感ではありません.
HTML 4では,3つの方法でページの符号化を指定することが提案されており,優先度の高低に応じて次のようになる. HTTPヘッダのContent-Typeフィールドの後に文字セットが続く. は、 は、
これはもちろん疑問ではありませんが、
時代が進む
しかし、時間が経つにつれて、開発者はだんだん一つのことを発見した.DOCTYPEの最も簡単な宣言のように、ブラウザは
実際、ブラウザはは、HTML解析のステータスマシンに基づいて「<」文字に「meta」文字列を付けることで決定される この文字列(ここではラベルの概念はなく、文字列のみ)を検索し、サブ文字列「charset」を見つけます. をさらに後ろに読み、すべてのスペース文字を無視して、最初の意味のある文字cを見つけます. cが"="でない場合は、2番目のステップに戻って探し続けます. cが「=」の文字であれば、下に進みます.
さらにすべてのスペース文字と単一引用符、二重引用符などをスキップし、単一引用符、二重引用符、スペース文字、終了ラベルなどに遭遇するべきでない文字が上になるまで後方にスキャンし、スキャンした文字列sを切り取る. sを解析し、符号化別名を得た.
上のアルゴリズムから、以下のいくつかの書き方は、ブラウザにコードを正しく認識させることができることがわかります. ......その他多くの奇妙な書き方.
そこで、歴史が進むにつれて、ついにある日、各ブラウザメーカーが一緒に座って、この問題を議論し始めました......最終的に彼らは驚いてそれぞれの実現が非常に似ていることを発見しました(根本的には相互に参考にしているかもしれません)、だから彼らはこの方法を一つの基準にすることにしました......最後に、長い議論を経て、HTML 5で愛されるコード宣言方式が誕生した.HTML 5では「meta charset要素」と呼ばれ、その最も簡単な形式は以下の通りである.
もちろんこれはHTMLの文法ですが、XHTMLに従ってXHTMLの方が親切だと思えば
前述した符号化を具体的に取得するアルゴリズムも詳細に記載されており、ここで見ることができる.
HTML 5時代になると、標準は再び符号化の宣言方式を修正し、細分化し、総じて以下の違いがある. HTML 5ではBOMを使用して符号化を決定できますが、UTF-16のBOM(すなわちU+FEFF)のみがサポートされており、BOMが符号化の優先度を指定する方法は説明されていません. HTML 5には HTML 5では、1ページにエンコードが指定されていない場合はASCIIをエンコードとして使用し、HTML 4ではブラウザが置かれている環境に応じて自分で選択できることを規定しています.
その他のその他
符号化の基本的な宣言方式に加えて、標準には注意すべき詳細がたくさんあります. HTML 5ではUTF-8符号化が非常に推奨されています. 規格ではUTF-32、JIS_を使用しないことが提案されているC6226-1983、JIS_X 0212-1990、HZ-GB-2312、JOHABなどの文字セットは、CESU-8、UTF-7、BOCU-1、SCSU文字セットの使用を禁止しています.しかし、実際にはブラウザは少なくともUTF-7を認識することができます. XHTMLを厳格に遵守したい開発者は、XML宣言を使用して符号化、すなわち 現実における各符号化宣言方式の優先度、およびいくつかの他の注意すべき詳細については、この文章は読む価値がある.
ベストプラクティス可能な限りHTTPヘッダ指定符号化を使用する. は、可能な限りUTF-8を使用するか、または少なくとも全局のすべてのリソースが統合符号化を使用する. UTF-16を使用したい場合は、Little EndianかBig Endianかを確認するためにファイルにBOMを追加します. 外部のスクリプトをリンクし、符号化が同じでないと判断できない場合はcharsetプロパティを追加します.
まず、簡単な例として、各ブラウザの下でどのような違いがあるかを簡単なHTMLページで見てみましょう.
<!DOCTYPE html>
最も簡単なHTML、
<head>
と<body>
はすべて内容がなくて、サーバーも具体的な符号化声明を出さないで、直接ローカルから開いて、各ブラウザの下でページの符号化を見ます:エクスプローラ
ひょうじコーディング
コメント
IE6
UTF-8
IE8
UTF-8
IE9
GB2312
システムデフォルト文字セット
Firefox3.5
GBK2312
システムデフォルト文字セット
Firefox4.0
ISO-8859-1
西欧言語、英語のデフォルトコード
Chrome
GBK
システムデフォルト文字セット
Opera
中国語-自動検出
GB 2312でもあるはず
表から分かるように,符号化を宣言する手段がないページについては,各ブラウザで異なる解析がある.もちろん最も簡単なページでは,どんな符号化(もちろんASCIIのスーパーセットが前提)を用いても影響はないが,符号化の正確な設定の重要性を示すに足る.
エンコーディング宣言
HTML 4とHTML 5は、それぞれ1つの章を用いて宣言を符号化する方法を採用しており、ここをクリックしてHTML 4の関連章を表示したり、ここをクリックしてHTML 5の関連章を表示したりすることができます.
本文の出典:http://www.otakustay.com/learning-html5-charset
まず、コードとは何ですか.符号化とは、特定の方法によって、ブラウザ(またはユーザエージェント)が特定のアルゴリズムでバイトストリームを解析し、本当に正しいコンテンツを得ることを指定することである.HTMLの標準では、符号化は別名で表すことができます.エンコードの別名はIANAの定義に由来し、このリストに表示されるエンコードのみがブラウザによって識別される.したがって、UTF-8をUTF 8と書くと、ブラウザが全く相手にしない可能性があります.また、符号化別名は大文字小文字に敏感ではありません.
HTML 4では,3つの方法でページの符号化を指定することが提案されており,優先度の高低に応じて次のようになる.
<meta http-equiv="Content-Type">
のラベルを使用して宣言される.<script>
タグにロードされたjsファイルなどの外部リソースの一部について、タグ上のcharsetプロパティによって宣言することができる.これはもちろん疑問ではありませんが、
<meta http-equiv="Content-Type">
のラベルでページを宣言すると、ブラウザがそのラベルに遭遇したとき、自分が使っているコードがラベル宣言と一致していないことに気づいたら、頭に戻ってページを再解析します.これによりページの一部が再解析されるため、ラベル方式で符号化を宣言しようとすると、できるだけ前にラベルを書くことをお勧めします.1つのベストプラクティスは、<head>
ラベルの後、他のラベルの前に書くことです.この点については、Google PageSpeedも紹介しています.時代が進む
しかし、時間が経つにつれて、開発者はだんだん一つのことを発見した.DOCTYPEの最も簡単な宣言のように、ブラウザは
<meta>
ラベルの符号化を読み取る際に、厳密に標準に従って行われているわけではありません.要するに、HTMLの解析段階では、Tokenizer段階以前からページの符号化を決定しなければならないため、ブラウザがDOMツリーを解析するように、DOMツリー構築時に<meta>
ラベルの構造を分解し、その中のhttp-equiv
とcontent
の属性を取り出して符号化を決定することは不可能である.実際、ブラウザは
<meta>
ラベル定義の符号化を読み取るために非常に簡単なことをしました.<meta>
ラベルであることを決定する.上のアルゴリズムから、以下のいくつかの書き方は、ブラウザにコードを正しく認識させることができることがわかります.
<meta http-equiv="Cotnent-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<meta charset=utf-8 />
そこで、歴史が進むにつれて、ついにある日、各ブラウザメーカーが一緒に座って、この問題を議論し始めました......最終的に彼らは驚いてそれぞれの実現が非常に似ていることを発見しました(根本的には相互に参考にしているかもしれません)、だから彼らはこの方法を一つの基準にすることにしました......最後に、長い議論を経て、HTML 5で愛されるコード宣言方式が誕生した.HTML 5では「meta charset要素」と呼ばれ、その最も簡単な形式は以下の通りである.
<meta charset=utf-8>
もちろんこれはHTMLの文法ですが、XHTMLに従ってXHTMLの方が親切だと思えば
<meta charset="utf-8" />
と書いても大丈夫です.前述した符号化を具体的に取得するアルゴリズムも詳細に記載されており、ここで見ることができる.
HTML 5時代になると、標準は再び符号化の宣言方式を修正し、細分化し、総じて以下の違いがある.
meta charset
のラベルが追加されています.その他のその他
符号化の基本的な宣言方式に加えて、標準には注意すべき詳細がたくさんあります.
<meta>
ラベル宣言符号化を使用すると、この符号化はASCIIのスーパーセット符号化にすぎない.ASCIIスーパーセットは、ASCIIをサポートする256文字の符号化であると簡単に考えられる.<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
を指定しなければならない.しかしこれはIE 6ではDOCTYPEに影響するため,開発者もその点で妥協せず,おとなしくHTMLの声明方式を用いている.ベストプラクティス
<meta>
タグを使用して符号化を指定する場合、http-equivの形式を使用しないことができますが、できるだけラベルを前に表示させ、少なくとも非ASCII文字の前に保証します.