php.iniによるmbstring.*の注意点
(2008/03/11)
php.iniファイルにおけるmbstring.*の値がある組み合わせになり、実行するphpファイルの内部エンコーディングに関する一定の条件を満たすと、文字化けが発生するようになります。 当社配布のPHPスクリプトは、この条件下で影響を受けます。 ここでは、その問題発生条件と対処方法を説明します。
文字化け発生の条件
- mbstring.encoding_translation = On である
- mbstring.http_input = auto である
- mbstring.internal_encodingの値(未設定含む)と、実行するphpファイルの文字エンコーディングが異なる
例えば、無料レンタルサーバーサービスのland.toでは、以下のような設定値のため、EUC-JP以外のphpファイルを設置してPOST動作を行うと、文字化けが発生します(2008年03月現在)。
発生条件に含まれる3つの設定値は、phpスクリプト内のini_set()等で変更することはできません。 したがって、以下に示す対処を実施することになります。
php.iniファイルによる対処
php.iniファイルの設定値を下記のように変更し、Webサーバー(Apache等)を再起動します。 一般的に、共用レンタルサーバー等でphp.iniファイルを変更することはできません。 さくらインターネットなどは、ユーザごとのphp.iniファイルに対応しています。
php.iniの例1
mbstring.encoding_translation = Off
mbstring.http_input = pass
mbstring.http_input = pass
php.iniの例2
; 設置しているphpファイルの文字エンコーディングと、
; mbstring.internal_encodingの値を同じにする方法
mbstring.internal_encoding = phpファイルの文字エンコーディング
; mbstring.internal_encodingの値を同じにする方法
mbstring.internal_encoding = phpファイルの文字エンコーディング
.htaccessファイルによる対処
phpをApacheモジュールとして実行している場合、phpファイルと同じディレクトリに.htaccessファイルを設置して、
php.iniの設定値を変更することができます (参考: phpマニュアル: 設定を変更するには)。
一部のレンタルサーバーサービスなどでは、この対処方法を実施できません。
例えば、land.to、@pagesなどは.htaccessを設置することはできません。
php_flag mbstring.encoding_translation off
php_value mbstring.http_input "pass"
php_value mbstring.http_input "pass"
.htaccessの例2
# 設置しているphpファイルの文字エンコーディングと、
# mbstring.internal_encodingの値を同じにする方法
php_value mbstring.internal_encoding "phpファイルの文字エンコーディング"
# mbstring.internal_encodingの値を同じにする方法
php_value mbstring.internal_encoding "phpファイルの文字エンコーディング"