【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}]/~/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}]/~/g;
$$html = Encode::encode($encoding, $$html);
$$html =~ s/encoding="\S+"/encoding="$charset"/g;
$$html =~ s/[^accept-]charset="\S+"/ charset="$charset"/g;
}
}
}
これで漏れはないはずです!