見出し画像

【TIPS】Movable Typeの文字コードをShift_JISに変換したら、色々文字化けした

2017.04.25に書いたブリコルールのブログ記事の引越しです

MT6では文字コード「UTF-8」を使うようになっているため、文字コード指定が「Shift_JIS」の場合、出力するHTMLが文字化けを起こしてしまいます。
そこで小粋空間さんのCharsetEncoderという「Shift_JIS」で出力できるプラグインを使用させていただきました。

簡単な設定ですぐに対応完了!な、はずなのですが、いくつか不具合が…

プレビューが文字化け

なぜかプレビューだけが文字化けを起こす事態に…
そこで記事テンプレートの文字コードの辺りを下記に調整しました。

Before

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="Shift_JIS">

After

<!DOCTYPE HTML>
<html lang="ja">
<head>
<mt:If name="preview_template">
<meta charset="utf-8">
<mt:Else>
<meta charset="Shift_JIS">
</mt:If>

プレビュー時だけUTF-8で指定したら直りました。​

「~」が「?」に文字化け

同じ現象で悩んでいる方がいらしたようで、こちらを参考に修正!
ありがとうございます。MT6でもいけました~

MT5 Shift-JISでの「~」(波ダッシュ問題)

出力されたHTMLの「meta charset」がおかしい

meta charset=”Shift_JIS”metacharset=shift-JIS”に、なぜか半角と「”」が消え、Sが小文字になってしまう…

こちらは「CharsetEncoder」を無効にすると解消されるようだったので、プラグインのCharsetEncoder.pmを修正。

Before

my $charset = '' ;
if ($encoding eq 'euc-jp') {
$charset = 'EUC-JP' ;
} elsif ($encoding eq 'shift_jis') {
$charset = 'shift-JIS' ;
} else {
$charset = 'Windows-31J' ;
}
$$html =~ s/[\x{FF5E}\x{301C}]/&#xFF5E;/g;
           $$html = Encode::encode($encoding, $$html);
           $$html =~ s/encoding="\S+"/encoding="$charset"/g;
           $$html =~ s/[^accept-]charset=\S+"/charset=$charset"/g;
       }
   }
}

After

my $charset = '' ;
if ($encoding eq 'euc-jp') {
$charset = 'EUC-JP' ;
} elsif ($encoding eq 'shift_jis') {
$charset = 'Shift_JIS' ;
} else {
$charset = 'Windows-31J' ;
}
$$html =~ s/[\x{FF5E}\x{301C}]/&#xFF5E;/g;
           $$html = Encode::encode($encoding, $$html);
           $$html =~ s/encoding="\S+"/encoding="$charset"/g;
           $$html =~ s/[^accept-]charset="\S+"/ charset="$charset"/g;
       }
   }
}

これで漏れはないはずです!

この記事が気に入ったらサポートをしてみませんか?