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違うとどうなのかは分からないけど,もう勘弁.とりあえずはコレが精一杯です.
まー,なんだかんだ言って,文法妥協しているファイルも多々あるんだけどね.テキトーなもんで.ハハ.
コメント (4)
application/xhtml+xmlだとトップページの月別ログへのリンクを折りたたんでいるJavascriptが動かなくなる現象が出たので,現在トップページはhtaccessによる対応をやめてmetaタグで文字コードを示している.
すべてのJavascriptが動かなくなるわけではないところがやっかいなところ.
application/xhtml+xmlだとdocument.writeが動かなくなるという事象はいくつか検索で見つかったけど,それは使ってないし…
投稿者:そうすい (2009年5月 3日 07:47)
お試しコメントです。スパムは来るし、ややこしいのですね・・。なんかもすげーとしか思えない自分は、世界に取り残されている。。。
投稿者:かのと (2009年5月 5日 19:08)
あ,書けましたね.良かったです.お試しありがとうございます.
修正は半分ぐらい道楽でやってるので,まあまあ楽しいです.謎が解ける快感といいましょうか.
解決策が分かって単純作業になってしまうと,大変ですが.
Movable Typeが正規表現でマッチした文字列を置換に使えたら作業はもっと簡単だったんですが……
正規表現の検索は出来るのに,あと一歩が不便です.
投稿者:Sousui (2009年5月 7日 22:03)
そして,これだけ苦労しておいて,今度はapplication/xhtml+xmlだとスパム避けのJavaScriptが動かないことに今気がついた.なんてこったい.
結局,text/htmlで流す羽目に.
こんどはapplication/xhtml+xmlとJavaScriptの関係を調べなくっちゃなあ.
投稿者:Sousui (2009年5月 7日 22:05)