FreeBSD 11.3 RELEASE - apache24 - PHP - 文字コードの設定

 クラウディア
1. 概要
2. ディレクトリごとの設定

1. 概要

 これからウェブサーバを立ち上げて、運用していくのであれば、ここを読む必要はありません。  2018年7月13日現在から作成するのであれば、日本語の文字コードは UTF-8 にしておいてください。  気を付けるのはそこだけです。  既に、コンテンツが存在し、その文字コードが UTF-8 以外であれば、ここを読んだ方がいいかもしれません。  日本語というのは厄介なもので、代表的な文字コードとして、Shift-JIS、EUC-JP、UTF-8 があり、実際にはもっとたくさんのコードがあります。  他国の状況はよくわかりませんが、英語が Native なひとはその分楽だろうなと思います。  実際、以前は、このサイトの html のソースは3つが混在していました。  ルートごとに文字コードが異なるようであれば、この項を読むとためになるかもしれません。

2. ディレクトリごとの設定

 php のソースを混在させるとき、表示させるまでは、ソースの文字コードを合わせておくだけで済むのですが、ブラウザからの入力やデータベースへのアクセスを行うと、うまく動作しません。少なくとも、ユーザごとあるいはディレクトリごとに統一はしているでしょうから、ディレクトリごとに文字コードを設定して動作させねばなりません。  これを可能にするのが .htaccess というファイルを作成してその中に設定を記述することです。  まず、.htaccess の設定を有効にするために定義ファイルの記述を変更します。  ここで紹介しているやり方と同じ方法でコンテンツを作成しているのであれば

/usr/local/etc/apache22/Include/
 配下にディレクトリごとの定義ファイルを用意しているはずです。

/usr/local/etc/apache22/Include/hogehoge.conf ← コンフィグレーションファイル
/usr/local/www/hogehoge/                      ← 設定対象とするディレクトリ
 上記の構成であれば hogehoge.conf の記述で以下の記述を確認し、記述がないか別の設定になっている場合は変更します。

<Directory "/usr/local/www/hogehoge/">
    ...
    AllowOverride All
    ↑ これを [All] にすることでこのディレクトリ以下の [.htaccess] の設定が有効になります
    ...
</Directory>
 文字コードを変更する場合 /usr/local/www/hogehoge/.htaccess を以下のように記述します。

php_value mbstring.internal_encoding UTF-8 ← 使用する文字コードに合わせます
php_flag mbstring.encoding_translation Off ← サーバ内で文字コードの変換を行うか行わないかの設定
                                              [Off] の場合文字コード変換を行いません
 これで configtest、restart で設定が反映されます。(.htaccess の記述のみ変更の場合は、Apache の restart は不要です)  設定内容がうまく反映されているかどうかは、phpinfo() で確認できます。  本当はこれより優れた方法として suphp というモジュールをインストールして、ディレクトリごとに php.ini を配置するというやり方があるようなのでです。  やり方をマスターしたら記述しようと思っていたのですが・・・。  その前に、当サイトはすべて UTF-8 へと移行してしまったので、その機会は永遠に失われそうです。