PHP・MySQL等における
文字コード等のPHP設定

PHPの設定

設定方法

文字コード等を適切に設定していないと文字化け等の不具合が起こることがありますが、その設定方法には以下の3種があります。

php.iniにより、サーバー内全てに対応
PHPの設定ファイル(xamppの場合、xamppフォルダ内phpフォルダ内に有)を修正。修正後は、コントロールパネルでApachを再起動(Stop→Start))。ローカルでの開発時には便利だが、レンタルサーバーでは通常利用できない。
 【記述例: mbstring.internal_encoding = utf-8 】
.htacceccにより、設置フォルダ以下に対応
上記の名前のファイルに設定を記述すると、そのファイルがあるフォルダとその下のディレクトリに反映される。php.iniを修正できない場合に便利であるが、レンタルサーバーによっては.htacceccを置けないところもある。
 【記述例: php_value mbstring.internal_encoding UTF-8 】
PHPのスクリプト内でその有効範囲にのみ対応
上記の設定が出来ない場合や、単独で設置場所を移動しての利用に柔軟に対応できるが、個別に設定する手間と注意が必要。
 【記述例: mb_internal_encoding ('utf-8'); 】
文字コードの設定(.htaccessで全てUTF-8とする場合)

設定する場所や、文字コードによって記述方法は異なりますが、ここでは.htaccessにおいてUTF-8で統一する場合の例を紹介します。

テキストによっては、SJISやEUC-JPに設定しているものなどもあり、テキストに沿う場合はそれに準じた方がよいですが、最近はutf8に統一する傾向があるようです。(ただし、携帯用は別途SJISで設定)

出力HTTPヘッダ送信
php_value default_charset UTF-8
mb_send_mail言語
php_value mbstring.language Japanese
mbstringデフォルト
php_value mbstring.internal_encoding UTF-8
HTTP入力コード検出
php_value mbstring.http_input auto
HTTP出力コード変換
php_value mbstring.http_output pass
内部文字コード変換
php_flag mbstring.encoding_translation OFF
コード自動検出順位
php_value mbstring.detect_order UTF-8,SJIS,EUC-JP,JIS,ASII
無効文字の代替文字
php_value mbstring.substitute_character none

なお、.htaccessのようなファイル名がドットで始まるファイルは通常Windowsでは作成できませんが、phpエディタeclipseなどで作成できます。上記の設定をする場合は、日本語部分を除いたphpから始まる1文を各行ごとに記述します。

エラー表示設定

PHPは記述が正しくない時などに、どのあたりが間違っている可能性があるかといったエラーを表示させることができます。ローカルでの制作中はエラーを表示させ、完成品をサーバーで実稼働させる際には表示させないようにするといでしょう。

php.iniで、非推奨関数使用時以外の全てのエラーについて表示させる場合
display_errors = On
error_reporting = E_ALL
.htaccessで、エラーを非表示にする場合
php_flag display_errors OFF
php_flag error_reporting OFF

なお、error_reportingによるエラーレベルの設定において、.htaccessでphp.iniのE_ALLと同等に設定する場合、OFFの部分を、2047 というように数字の値で指定します。

また、PHPのVer5で非推奨関数使用エラーも表示させる場合は、php.iniではE_ALL|E_STRICT、.htaccessでは2048としますが、Ver4では不都合があり、Ver6ではE_ALLでそれと同等扱いとなったそうです。

その他の設定

xamppを利用する場合、php.iniで、デフォルトで自動設定されているかと思いますが、拡張モジュールの設置ディレクトリや、タイムゾーンの設定も確認しておきましょう。行頭に;が付いている場合は無効になるので、有効にする場合はそれをはずしておきます。

php.ini設定例
extension_dir = "D:\xampp\php\ext"
extension=php_mbstring.dll
date.timezone = "Asia/Tokyo"