php外部ファイルの文字化けを直す

ページを作るとき、ヘッダとフッタとメニューを外に切り分けて、楽したい。

ブログやCMSでは普通に使われる手法です。
ページの一部をパーツにして分けておきます。

header.php
navi.php
footer.php

以上3ファイルをbody 要素のなかに埋めて1枚にしたら便利そう。

先に結論を書きますと、「php」でできました。
私の方法では遠回りみたいなので
手っ取り早くこちらを参照してください。
phpのロリボ側の設定でなおるらしいです。

ロリポップでPHPファイルが文字化け | とりあえず自分でやってみよう!

当サイトのエントリーで解決する場合
時間がなければ最後のほうをお読み下さい。
外部ファイルの読み込みでブラウザの文字コードが勝手にshift-jisになってしまう。
そんなあなた向けに答えを書いておきました。

以下のサイトを参考に作業しました。
phpやjavascriptで外部ファイルを読み込む方法です。
HTML5とCSS3とPHPとjQuery入門ブログ: 外部ファイルの読み込み
PHPスクリプト講座:外部ファイル読み込み — そふぃのphp入門
ヘッダとフッタを外部から読み込む – Webの開設と運営法
徒然日記 JavaScript(jQuery)で外部ファイルを読み込む方法を紹介。

phpなのでお約束通り文字コードにひっかかりました。

後学のため記述しておきます。

まずは当方の環境から。

サーバーはロリポップです。
phpのテストファイルを3枚。
サーバーは最新版に移転してphp5です。
php.iniの初期設定はたぶんいじってない。

【shift-jisの場合】
shift-jis は割と簡単にできました。たぶん偶然。
まず、ヘッダの中にあるcharset(以下キャラセット-文字指定の意)をshift-jisに統一。
エディタで修正。キャラセットのない外部ファイルが文字化け。

以上は外部ファイルもshift-jisにて保存で解決。
高機能なフリーソフトを利用しました。
窓の杜 – EmEditor

【UTF-8の場合】
shift-jis はできたので、UTF-8ではどうかなと実験。
先ほどと同じファイルを全部UTF-8で保存し直します。
読み込む元になるphpファイルのキャラセットも、同様にshift-jis に変更。
コレで読めば簡単だなと思っていると意図せぬ変化が。

そう、phpの文字化けです。

まずはエディタの保存方法を疑いました。
ユニコードはアタマに余計な文字が付くのでエディタ経由で保存の際
BOMとかういのをを外してみました。
XML用語事典 [BOM (Byte Order Mark)]
でもなおらないや。
そういやBOMって雑誌があったね。
インターネットBOMB ボム オフィシャルサイト | 学研パブリッシング

ドリームウィーバーでもファイル保存の際、「保存する」ウインド下部の
「BOM」のチェックボックスをオフにするとBOM無しで保存できます。
Adobe Dreamweaver CS5 Windows版すごく高い。
まあ、そのくらいしてくれないと困る。

【答え】
UTF-8でphpファイルを外部ファイルを読み込むには下ごしらえが必要。

えっとロリポップの管理画面から php.ini に入ります。
そこでmbstring.encoding_translationのoffをonに変更するだけ。
読み込んだときの文字コードがなにか判断する機能らしい。

・mbstring.encoding_translation

HTTP入力文字のエンコーディング検出と内部文字エンコーディングへの変換を有効にします。

php.iniの設定 / ユーザー専用ページ / マニュアル – ロリポップ! より

先輩に聞くPHPの素朴なギモン
ほかに、手元にあったこちらの本の21ページが参考になりました。
私みたいな初心者が右往左往するとき持っておきたい一冊。

【まとめ】
サーバー側の設定を直して解決しました。
初期設定ではどういう都合か外読みファイルを勝手にshift-jis と解釈していたようです。
Live HTTP Headers :: Add-ons for Firefox
途中で試してみますと、なぜかshift-jis の文字が。
何ででしょう?そこまでは追求しませんけど。

そのあたりでようやくサーバー側の設定だとわかりました。
普通はそんな外部読み込みなどせずpukiwikiでも自動で入れて済ませるのでしょうけど
小規模なまとめサイトは静的なファイルで作って共通要素だけ外読みしたいのです。
これでかなりの省力化。いままでここの部分でひっかかってうまく作れないままでした。

ようやく解決したよ!

クリエイターがたくさん使ってる、ロリポップ!
独自ドメイン、Cron、共有SSL対応。
Wordpress、Movable Typeなどの簡単インストール、
XOOPS、OpenPNE利用可能(インストールマニュアル付)。
PHP・CGI・SSI対応。
1アカウントにつき、サブドメインは300個まで作成可能。
独自ドメインプラン利用の場合、メールアドレスはいくつでも作成可能!
容量8GB(オプション利用で最大10GB)で月額263円から。