メイリオのバグはXHTML適合文書にあり!

SCREAMOはフォントファミリーにメイリオを優先表示するようにスタイルシートで指定してある。しかしInternet Explorer 6の環境でメイリオフォントをインストールしていても、欧文以外はMS Pゴシックで表示されていた。Internet Explorer 7やFirefoxでは全く問題なし。さて、これはなぜだろう。

お許しください

とりあえずバグ潰しをする際、一番始めに行うことはソースを見直す事。久しく見ていなかったSCREAMOのソースを恐る恐る覗いてみると、そこに驚愕のコードが書かれていた。以下、ソース上部。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="sixapart-standard">

お気づきになっただろうか。htmlとxmlの言語設定がenになっているのだ。なんというイージーミス・・・。おお神よ。我が無知をお許しください。

Movable Type の言語設定に問題発見

早速Movable Typeのテンプレートを覗いてみると、該当コードの吐き出す部分は下記のようにコーディングされていた。

<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<$MTBlogLanguage$>" lang="<$MTBlogLanguage$>" id="sixapart-standard">

一見問題ないように見えるが、<$MTBlogLanguage$>に注目されたし。これはMovable Typeの言語設定によってjaになったり、enになったりと適切な言語を自動的に投入してくれるタグ。Movable Typeの設定画面では、「ブログの設定」の「公開」に移動し、「日付の言語」から選択する。ここが英語になっていたために、htmlとxmlの言語設定が英語になっていた模様。なんということだ!!

なぜわざわざ英語に設定してかと言うと、テンプレートで日付を表示するタグを使用していた場合に、2008年1月1日みたいに、日本語表記で日付が吐き出されるのを嫌い、January 1, 2008 のように英語表記にしたかったため。それがもろに裏目に出てしまったというわけである。うぅむ、後ろからナイフで突き刺された感じだ。

早速修正。なお、日付の英語表記は崩したくないのでハードコーディングした。

<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" id="sixapart-standard">

IE6とメイリオの微妙な関係

言語設定を修正し、改めてInternet Explorer 6でサイトを表示してみると、きちんとメイリオで表示されるようになっていた。どうやらhtmlとxmlの言語設定によってメイリオをシカトするらしい。うーん、知らなかった。というか、日本語サイト以外にメイリオ指定するサイトもないだろうに。というか、今回は…

超レアケース!!

最後に、他のバグも潰しまくったのは内緒です。

related story