※最初に書いた記事は間違っていたようなので書き直しました。
MovableTypeで、PCと携帯の両方に対応するサイトの制作を行いました。
携帯に対応と言うことで、文字コードは「Shift-JIS」にします。
しかし、MySQLの文字コードをShift-JISにすると、何かと問題が出るので、内部はUTF-8で統一し、出力時にShift-JISにすることにしました。
そこで便利なのが、「CharsetEncoder プラグイン」です。
これを導入して、文字エンコーディングを「Shift-JIS」に設定して再構築すれば、ほとんど難しいことを考えずにShift-JISのサイトが出来上がります。
・・・と思ったら、クライアントから、『「~」が、「?」に化ける』と言われてしまいました。
いわゆる、「UTF-8の波ダッシュ問題」というやつです。
実は、「CharsetEncoder プラグイン」には、「cp932エンコーディング」というものも用意されています。
これは、ずばり「~」対策のための機能な訳ですが、その設定をしているにもかかわらず、「~」が「?」になってしまうのです。
いろいろ設定を変えてみたのですが、なぜか、「ブログ記事」と「ブログ記事リスト」で動きが異なったり、何か、プラグインの動作に問題があるような感じがしました。
そこで、プラグインのコードを見てみることにしました。
今回使用したのは、v0.12 です。
その中の、「lib/CharsetEncoder.pm」に、問題になりそうな箇所を見つけました。
35行目と、162行目に、metaタグに、charsetをセットする文があります。
my $charset = ($encoding eq 'euc-jp') ? 'EUC-JP' : 'Shift_JIS' ;
「$encoding がeuc-jp でなければ、Shift-JIS にせよ」となっています。
つまり、せっかく $encoding に「cp932」がセットされていても、「Shift-JIS」にされてしまっているのです。
そこで、ここに条件分岐を加えて、
「$encoding がeuc-jp だったら、EUC-JP、
違ったら、shift-jis なら、Shift-JIS、
それも違ったら、Windows-31J」
というふうにしてみました。
(cp932という名前は、正式にはcharsetにセットする名前として認められていません。Windows-31J が正式なものです)
コードはこんなふうになります。
35行目と、162行目の2箇所とも、下記のように書き換えました。
my $charset = '' ;
if ($encoding eq 'euc-jp') {
$charset = 'EUC-JP' ;
} elsif ($encoding eq 'shift_jis') {
$charset = 'shift-JIS' ;
} else {
$charset = 'Windows-31J' ;
}
こうすることで、「~」は文字化けしなくなりました。
しかし!
今度は、Macintoshから入力した「〜」が「?」になってしまうのです。
つまり、
・charset=Shift-JIS → Winの「~」(~)が文字化け、Macの「〜」(〜)は正常
・charset=Windows-31J → Winの「~」(~)は正常、Macの「〜」(〜)は文字化け
というわけです。
文字コードをいろいろいじってみましたが、あちらを立てればこちらが立たずでどうしようもありません。
仕方がないので、両方を統一することにしました。
「~」も、「〜」も、「~」にしてしまいます。
下記のコードを、先ほどのコードの下に追加してやります。
(44行目)
$$html =~ s/[\x{FF5E}\x{301C}]/~/g;
(179行目)
$$output =~ s/[\x{FF5E}\x{301C}]/~/g;
管理画面上では、両方の「~」が混在していますが、出力されたHTMLを見てみると、数値参照に置換されています。
困っている方、ぜひ、お試しくださいな。
![]()
この記事を書いた人

-
FAシステムメーカー、国内最大手印刷会社製版部、印刷・ウェブ制作会社を経て、家庭の事情で実家に帰省して独立
現在はフリーランスと制作会社シニアディレクターのマルチワーク
ウェブ制作のほぼ全般を見渡せるディレクター業務が主だが、デザイン・コーディングも好き
1997年ブログ開設
WordPressコミュニティには2011年から参加
WordCamp Kansai 2025 セッションスピーカー
WordCamp Tokyo 2023 パネルディスカッションパネラー
WordCamp Kansai 2016 セッションスピーカー
WordBench京都、WordBench神戸、WordBench奈良、WordPress Meetup八王子など登壇多数
最新の投稿
技術記事2025年12月23日「固定ページ本文ブロック」でWordPressを運用しやすくしよう
ブログ2025年11月16日WordCamp Kansai 2025 で「触れるけど壊れないWordPressの作り方」についてお話しました
技術記事2025年6月15日ブロックテーマ時代のWordPress制作ワークフローとは
技術記事2025年3月7日WordPressに百千鳥フォントを入れて遊んでみました

ご質問・ご相談などありましたら
お気軽にお問い合わせください
資料請求・お問い合わせにはメールアドレスが必要です








コメントを残す