トップ » PHPスクリプト » php.iniによるmbstring.*の注意点

php.iniによるmbstring.*の注意点

(2008/03/11)

php.iniファイルにおけるmbstring.*の値がある組み合わせになり、実行するphpファイルの内部エンコーディングに関する一定の条件を満たすと、文字化けが発生するようになります。 当社配布のPHPスクリプトは、この条件下で影響を受けます。 ここでは、その問題発生条件と対処方法を説明します。

文字化け発生の条件

  1. mbstring.encoding_translation = On である
  2. mbstring.http_input = auto である
  3. 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

php.iniの例2
; 設置しているphpファイルの文字エンコーディングと、
; mbstring.internal_encodingの値を同じにする方法
mbstring.internal_encoding = phpファイルの文字エンコーディング

.htaccessファイルによる対処

phpをApacheモジュールとして実行している場合、phpファイルと同じディレクトリに.htaccessファイルを設置して、 php.iniの設定値を変更することができます (参考: phpマニュアル: 設定を変更するには)。
一部のレンタルサーバーサービスなどでは、この対処方法を実施できません。 例えば、land.to、@pagesなどは.htaccessを設置することはできません。

.htaccessの例1
php_flag mbstring.encoding_translation off
php_value mbstring.http_input "pass"

.htaccessの例2
# 設置しているphpファイルの文字エンコーディングと、
# mbstring.internal_encodingの値を同じにする方法
php_value mbstring.internal_encoding "phpファイルの文字エンコーディング"