エックスサーバでwordpressのカスタムフィールドテンプレートが文字化けした

エックスサーバでwordpressのカスタムフィールドテンプレートが文字化けした。

エックスサーバでwordpressのカスタムフィールドテンプレートをいじる機会があった。カスタムフィールドテンプレートはわかりやすいマークダウン記法みたいな書き方でカスタムフィールドを色々と設定できる優れものなプラグイン。このプラグインなのだけれど開発環境から本番環境にアップロードすると使えなくなる現象に遭遇した。

具体的にはカスタムフィールドテンプレートでテンプレートをロードさせようとするとロードした文字が化けてしまっていること。
キャプチャ

これじゃあせっかくのテンプレートが使い物にならないです。
少し調べてみるとサーバからのレスポンスヘッダに文字コードが指定してある。

Content-Type: text/html; charset=Shift_JIS

これがどうにもこうにも原因らしい。

文字コードはすべてUTF-8で統一しているはずで、どこかにShift-JISなんて指定したか、とか思いながら確認してみた。

  • wordpressの管理画面にある文字コード
  • php.iniのmbstring.internal_encoding
  • プラグイン本体のコード

疑わしきは調べていったんだけれど解決できず。

で、テスト環境ではうまくいっているのだろうからこれはやっぱり本番環境のエックスサーバがおかしいのだろうということでさらに疑ってみた。php.iniが編集できる柔軟さは認めるのだけれど、Shift-JISを吐かれては困る。

色々調べたところapacheが.phpに対してheaderをデフォルトで吐き出す設定があることにたどり着いた。同時に湯バード先生からも同じトコロを指摘される。

通常この項目はapacheのhttpd.conf辺りで設定するのだけれど.htacessでも設定できるらしい。というわけで以下の項目をwordpressのドキュメントルートにある.htacess追記してみた。

AddDefaultCharset UTF-8

この設定で無事に治りました。

注意すべきは.htaccessはworpdressのカスタムURLストラクチャとかを書き換えることがあるのでその際には再度同じ文を書き加える必要があること、かな。忘れないようにしよう。

またこのような問題だとなかなか対処しづらいと思う。たまたまapacheのレスポンスヘッダから分かったのだけれど文字化けしたときにはmbstringを見て下さい、ってエックスサーバに書いてあったりして困る。これ恐らくデフォルトの文字コードをShift-JISで、とかに設定されたのかなと推測するけれどそれが困りました。たぶん問い合わせても対応できかねます、で終わっちゃうだろうし。しょんぼりっすね。

コメントを残す