Internet Explorer 6でUTF-8が文字化けしていた件とその顛末
IE6で文字化けしていた件ですが,とうとう,IE6搭載機をかっぱらってきて対応しました.Movable Typeを導入したときからだから2年越しか.長い道のりだった.Movable TypeのデフォルトがUTF-8で無かったら,そしてXHTMLで無ければ,さらに,私がテンプレートを大幅にいじらなければこんなことにはならなかったのに.
いろいろなところをいじったのですが,結局,IE6が微妙にXMLに対応していなかったのが原因だったようだ.
つまり,冒頭の<?xml version="1.0" encoding="UTF-8"?>
を解してくれなかったのがことの発端である.
デフォルトのMovable Typeのテンプレートには<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
という記述があって,これがあればIE6は解釈してくれる(=文字化けしない)のだが,私はテンプレートからこの記述をぬいているのである.なぜ抜いたかといえば,XHTMLで書いたファイルでAnother HTML-lintで文法チェックをかけたら,
<meta> に指定されているメディアタイプ text/html は XHTML1.1 には指定しないようにしましょう。
XHTML1.1 では <meta http-equiv> を記述すべきではありません。
と出たのを,素直に(?)鵜呑みにしたのである.
直す方法はいくつかある.
- HTML4.0で書き直す.
- →ヘッダだけならともかく,空要素の末尾を変換し直すのが大変すぎる.<br />を<br>など.頻繁に出てくるimgもそうだ.しかも,これからもMovable Typeの吐くコードは<br />が出てくるだろう.
- 妥協して<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />と書いてしまう.
- それは最終手段にしたい.
- .htaccessに記述を加えてサーバ側で文字コードを指定する.
- そうしよう,そうしよう.
ところがだ.AddType "application/xhtml\+xml; charset=UTF-8" .html
と書いたら,IE6だとダウンロードダイアログが出てくる.マヂかよ.ここではじめて,Internet Explorerがapplication/xhtml+xmlに対応していないことを知った(これは,最新IE8もらしい).なお,試したところ,.htaccessにAddType "text/html; charset=UTF-8" .html
という記述を加えたところ,IE6でも文字化けしなくなった.
うーん,XHTMLはtext/htmlが好ましくなく,xhtml+xmlだからこそhttp-equivが好ましくない,だからこそmetaによる文字コード指定を削除したのに,なんか癪だなあ.
参考:W3C XHTML Media Types.
結局,xhtml+xmlを解するブラウザ(FirefoxやOperaなど)にはapplication/xhtml+xmlのメディアタイプと文字コードを,解さないブラウザにはtext/htmlのメディアタイプと文字コードを付加することにした.IEに対しては妥協しているようなもんだけど.ここ,さくらのレンタルサーバはmod_rewriteがインストールされているので,これを利用する..htaccessに下記の記載を加えればOK.
AddType "text/html; charset=UTF-8" .html
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{LA-F:REQUEST_FILENAME} \.html
RewriteRule .* - "[T=application/xhtml+xml; charset=utf-8]"
ところが,ここからがまた大変だった.application/xhtml+xmlで送られてきたファイルはブラウザでの文法解釈が厳密で,パースエラーの嵐になったのである.結局,この文法修正に1日中かかった.直していて分かったが,エラー表示はFirefoxよりOperaの方が分かりやすい.まあ,けっこうタグのミスが見つかってこれもまた良かったよ.
たぶん,これでIE6でも文字化けしなくなった......と思いたい.少なくとも私が調達してきたWin2k+IE6では化けなくなった.Safariだとどうなのか,OS違うとどうなのかは分からないけど,もう勘弁.とりあえずはコレが精一杯です.
まー,なんだかんだ言って,文法妥協しているファイルも多々あるんだけどね.テキトーなもんで.ハハ.