PHPの文字コード設定のせいでWordPressでメディアライブラリのメニューの一部が文字化けしているのをphp.iniではなくて.htaccessの変更で直す

More than 3 years have passed since last update.

ちょっとしたことですが、同じ問題で困っている人がこの世にもう一人くらいいるかもしれないので。

レンタルサーバーにおいてあるWordPressで独自のテーマを使って運用しています。ほとんど問題なく運用しているのですが、一つだけ問題がありました。

記事を書く時、メディアライブラリから何か挿入しようとすると、左上のプルダウンメニューの付近と右下の挿入ボタンの表示が文字化けします。他のメニューやボタンは文字化けしないのに、これらだけしていました。

検索してみたところ、こちらで解決法まで掲載されていました。

WordPress.org フォーラム: [解決済み] メディアライブラリのグリッドビューで文字化けが起きます。

ここで紹介された解決策は、php.iniの文字コードに関する設定が下記のようになっているのを

「mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII」

以下のようにしたら、直ったとのことでした。


php.ini

mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII


つまりUTF-8を優先するようにしたら良いようです。しかし、私が借りているのはレンタルサーバーなので、php.iniを訂正することはできません。そこで、php.iniを訂正しなくても良い方法を探しました。下記のサイトにかいてあることを応用すればできそうです。

Layer8: php.iniを変更せずにマルチバイト文字列関数 (mbstring)を使えるようにする方法

レンタルサーバーのWordPressをインストールしてあるフォルダの.htaccessに下記の設定を追加しました。上記のサイトで公開されている.htaccessへの設定の追加をUTF-8が優先になるように変更したものです。


.htaccess

<Files *.php>

php_value mbstring.internal_encoding "UTF-8"
php_value mbstring.http_input "UTF-8"
php_value mbstring.http_output "UTF-8"
php_value mbstring.detect_order "UTF-8,SJIS,EUC-JP,JIS,ASCII"
php_value mbstring.language "Japanese"
</Files>

多分レンタルサーバーでもインストールされているとは思いますが、phpのmbstringモジュールのインストールが必須だと思います。この記述を書き加えたら、メディアライブラリのメニュー・ボタンの文字化けが無事なおりました。