2011-03-28 5 views
5

は、ブラウザが文字エンコーディングを指定し<meta>タグに遭遇した、次のように仮定します<head>セクションの前の文字の一部が持っているかもしれないのでブラウザは文字エンコーディングを指定する<meta>タグをどのように処理しますか?

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

それは、再びページを解析し、最初からやり直すん間違って解釈されましたか?または、以前の文字が正しく解釈されないようにする他の制約がありますか?

答えて

4

、文句を言わない<head>のcharset宣言を見つけた後に戻って、彼らはその時点までのASCII互換文字セットアップを想定ブラウザ。残念ながら、私はこれを確認するための参照を見つけることができません。

サーバが既にContent-Type HTTPヘッダを提供している場合、ブラウザで確認するとContent-Typeメタ要素は無視されるため、サーバ側の不適切な文字セットを<meta>要素で上書きすることはできません。

<meta> charset宣言のポイントは、HTTPサーバーによってサーバーではないHTML文書用です。

つまり、HTMLファイルの<meta>文字セット宣言に頼るべきではありませんが、正しい文字セットを提供するようにHTTPサーバーを設定してください。なんらかの理由で<meta> charset宣言に頼らなければならない場合は、できるだけ早くその位置にASCII文字を置き、可能であれば最初の要素として配置してください。

+1

ありがとうございました。「その時点までASCII互換の文字セットを想定しています」という参照が見つかりました。W3C:http://www.w3.org/TR /html4/charset.html#h-5.2.2。必要に応じてタグの配置に関するアドバイスをお待ちしております。 –

0

ノード構造に実際の影響はありません。テキストノード(および属性ノード)の内容のみをトランスコードする必要があります。

サーバーが

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

を送信した場合...ブラウザをヘッダには最初から右の文字セットを知っています。あなたはの.htaccess含むファイルとTHSをacieveことができます。私の知る限りでは

AddDefaultCharset utf-8 
+0

おそらく、メタタグが 'Content-type'ヘッダーと異なる文字セットを指定している可能性があります。それ以外の場合は、メタタグを使用するためのポイントがないようです。そして、ドキュメントノードを再解析する必要はありませんが、 ''セクションの前の部分で何か間違ったことがありますか? (あるJavaScriptの文字列の値など)。 –

1

パーサから始まることがあります。関連する仕様は次のとおりです。http://dev.w3.org/html5/spec/parsing.html#change-the-encoding

ブラウザは伝統的にこのアルゴリズムを正確に実行していない可能性があります。彼らはすべて少しずつ違うことをしている可能性があります。ただし、上記のリンクはHTML5準拠のブラウザで何をすべきかを説明しています。説明されたアルゴリズムは、さまざまなブラウザの以前の動作のアマルガムである可能性が高い。

HTML5はまだ作業草案なので、これは変更されることがあります。

+0

+1興味深いです。HTML5でこれが新しいです。 –

+0

@Joel - アルゴリズムの標準化が新しくなりましたHTML5では、はい。 – Alohci

関連する問題