上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
PHPがBOM付きUTF-8をうまく処理してくれない件に続いて文字コード絡みの話。

私がプライベートで使っているSBM、FC2ブックマーク最新4件のブックマークを表示するブログパーツも提供しています。

ところが、Firefoxで私のブログを開くとこのブログパーツのブックマークタイトルが文字化けを起こす。しかし取り込んでいるjavascriptを直接開くと、何故かこれはちゃんと化けずに表示される。

私のブックマークパーツで取り込んでいるjavascript

で、化けている時に何が起きているかというと、取り込んでいるjavascriptはEUC-JPで記述されているのだけれど、FirefoxがこれをISO-8859-1でエンコードしているために表示が崩れている。ただしブログ本体の部分はEUC-JPで記述されていて、ちゃんとEUC-JPでエンコードされて表示されている。(ブログ本体のレスポンスヘッダでもMETAタグでもEUC-JPが指定されている)ピンポイントに取り込んだブックマークパーツの部分だけISO-8859-1でエンコードされてしまうわけだ。なんでやねん。

ここまで読むとFirefoxの不具合じゃないの(IEでは化けないし)、と思いそうになるのだけれどちょっと待って欲しい。
ブログ本体のレスポンスヘッダ


HTTP/1.x 200 OK
Date: Wed, 09 Nov 2005 12:50:03 GMT
Server: Apache/2.0.54 (Unix) PHP/4.3.10 mod_perl/1.99_19 Perl/v5.8.3
Vary: Host
X-Powered-By: PHP/4.3.10
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=euc-jp
Content-Language: en



取り込んでいるjavascriptのレスポンスヘッダ


HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Wed, 09 Nov 2005 12:26:08 GMT
Server: Apache/2.0.52 (Unix) PHP/4.3.10 mod_perl/1.99_19 Perl/v5.8.3
X-Powered-By: PHP/4.3.10
Keep-Alive: timeout=5, max=20
Connection: Keep-Alive
Content-Type: text/html; charset=none
Content-Language: en


文字コード宣言は行いましょう(HTML)補足: HTTPヘッダとの競合

MozillaはHTTPヘッダの内容の優先度が高いらしい。


つまり、Firefoxはブログ本体と取り込み先のjavascriptのエンコード判定を別々に行っていて、取り込もうとしているjavascriptの、リクエストヘッダのContent-Type: text/html; charset=noneの部分で文字コードが指定されていないために、勝手にISO-8859-1でエンコードしているのではないか、という推測。厳密には検証してないんだけれど、たぶんFC2側のちょっとしたプログラム変更で対応できる。(何で直にjavascriptを開くとちゃんとEUC-JPで表示されるの?とか疑問はある)

これ、本当は8月に書こうと思っていて、FC2にも報告してるんだけれど一向に調査結果とか音沙汰がないまま忘れて、さっき思い出した話。

Apache2.0でページが文字化けしてしまう

こっちはオマケ。
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2005 The elephant vanishes all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。