Movable Type 5でUTF-8以外のページを出力する

Movable Type 5では、全ての内部処理でUTF-8を使うようになっています。
ただ、携帯サイトを作る時など、UTF-8以外の文字コードで、テンプレートの再構築結果を出力したい場合もあります。
その方法を紹介します。

MT-I18Nプラグインで文字コードを変換する

Movable Type 5では、記事等のデータはすべてUTF-8で保存します。
UTF-8以外のページを出力したい場合は、小川宏高氏が作られた「MT-I18N」というプラグインを使って、テンプレートを再構築する時点で、処理結果の文字コードを変換するようにします。

MT-I18Nプラグインをインストールすると、「MTEncodeText」というテンプレートタグが追加されます。
テンプレート全体を、MTEncodeTextタグのブロックで囲むと、文字コードを変換することができます。

例えば、Shift JISに変換したい場合は、テンプレートを以下のように書きます。

<mt:EncodeText to="shift_jis">
ページに出力する内容(テンプレートタグやHTMLのタグなど)
</mt:EncodeText>

ただし、テンプレート先頭の「<mt:EncodeText to="shift_jis">」タグの前と、最後の「</mt:EncodeText>」タグの後には、文字を入れてはなりません(スペースや改行も不可)。
何らかの文字が入っていると、再構築結果が文字化けします。

なお、PC用と携帯用のテンプレートを別々に作り、携帯用のテンプレートだけMTEncodeTextタグを入れるようにすれば、PC用ページをUTF-8で出力し、携帯用ページをShift JISで出力することも可能です。

EUC-JPでの出力

今ではあまり機会は多くないと思いますが、EUC-JPでページを出力したいこともあります。
前述のMTEncodeTextタグでEUC-JPへ変換することもできますが、その前にMT本体のコードを修正する必要があります。

修正するファイルは、MT_DIR/lib/MT/I18N/default.pmです。
このファイルの179行目を、以下のように修正します。

修正前

if ( ( ( 'iso-2022-jp' eq lc($to) ) || ( 'shift_jis' eq lc($to) ) )

修正後

if ( ( ( 'iso-2022-jp' eq lc($to) ) || ( 'shift_jis' eq lc($to) ) || ( 'euc-jp' eq lc($to) ) )

上記の修正を行った後、テンプレート全体をMTEncodeTextタグのブロックで囲み、MTEncodeTextタグに「to="euc-jp"」のモディファイアを付けると、再構築結果をEUC-JPで出力することができます。

なお、Shift JISに変換するときと同様に、テンプレート先頭の「<mt:EncodeText to="shift_jis">」タグの前と、最後の「</mt:EncodeText>」タグの後には、文字を入れてはなりません(スペースや改行も不可)。