フリーランスWebデザイナーの日常

勢いで会社を辞めてとりあえず開業し、一ヶ月でフリーランスになったWebデザイナーのブログ。

ローカル環境でバーチャルホストごとに文字コードを指定する

久々に文字化けにつまずきました。

対応していたのは既存サイトの改修案件。 いつも通り、まずはMAMPでローカルサーバーを立ててサイト全体を確認したところ、全ページ文字化けしていました。

原因を調べる

まずは文字化けの原因を探るべく、HTML内の文字コード指定を確認。

head内を確認してみると、HTML4.01でmeta-charsetにはshift_jisの指定が。(今はUTF-8を使用するのが主流ですが、古いサイトだったりフォームが絡んでいたりするとたまに遭遇しますね)

今回は既存のサイトをいじるので、トラブルを避けるためにもサイト全体の文字コードを変更するなんてことはしない方が良さそう。

ということで自分のローカル環境をSHIFT-JISに対応させることにしました。

MAMP文字コードを変更する

日本語版MAMPでは、デフォルトの文字コードUTF-8ではないのだそう。
php.iniを編集して、設定を変更してみます。

macの場合は以下に存在するファイルです。
アプリケーション/MAMP/bin/php/php7.1.6/conf/php.ini
※ 利用中のPHPのバージョンを選択。

394行目付近

;default_charset = "iso-8859-1"
//↓セミコロンを削除し書き換える
default_charset = "SHIFT-JIS"

1018行目付近

;mbstring.language = Japanese
//↓セミコロンを削除
mbstring.language = Japanese

1023行目付近

;mbstring.internal_encoding = EUC-JP
//↓セミコロンを削除しUTF-8へ書き換える
mbstring.internal_encoding = SHIFT-JIS

1026行目付近

;mbstring.http_input = auto
//↓セミコロンを削除
mbstring.http_input = auto

1041行目付近

;mbstring.detect_order = UTF-8,SJIS,EUR-JP,JIS,ASCII
//↓セミコロンを削除
mbstring.detect_order = UTF-8,SJIS,EUR-JP,JIS,ASCII

変更後、MAMPを再起動して表示を確認します。
これはなぜなのか結局わからなかったのですが、この時点では私の環境ではまだ文字化けが直っていませんでした。

しかも、この方法だとMAMP自体の文字コードを変えてしまっているので、他のバーチャルホスト内のデータもSHIFT-JISになってしまっているはず。
作業するたび毎回php.iniファイルを編集して文字コードを切り替えるのは効率が悪い。

バーチャルホストごとに文字コードを切り替える

ということで本題。バーチャルホストごとに個別で文字コードを指定する方法を調べてみました。

バーチャルホストの設定をしている以下のファイルに、直接文字コードを指定すれば良いそうです。 /etc/httpd/conf.d/vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/var/www/html/xxxx"
    AddDefaultCharset shift_jis
</VirtualHost>

この設定を反映するために、先ほどのphp.iniファイルに記述されているMAMP文字コードの指定は空の状態にしておきます。

;default_charset = "UTF-8"
default_charset = ""

これでやっと文字化けが解消されました!

↓ 参考にさせていただいたサイト

MAMP PHP文字化け対処法 - Qiita

バーチャルホスト毎に文字コードを設定する | blog@human

WEBページの文字化けはApacheの設定だけではなかった | Scribble