日本語文字セットの設定
日本語で PHP スクリプトを記述する場合は、使用環境に応じた文字セットを設定しないと文字化けを起こします。
文字セットは、以下の各ファイルで設定可能です。
- httpd.conf
-
サーバ管理者だけが設定可能。
汎用性を持たせるためには、バーチャルホストでの設定が望ましい。
- php.ini
-
サーバ管理者または許可されたサイト管理者が設定可能。
PHP の特性上、可能ならここでの設定が一番望ましいです。
- php スクリプト
-
サイト管理者(スクリプト作成者)が設定可能。
汎用性は最も高い。
- .htaccess
-
サイト管理者が設定可能
(.htaccess の設置が許可されている必要があります)。
最も簡易でなおかつ強力な設定方法ですが、サーバによってはコマンドが制限されていたりして、汎用性は低くなります。
*注
JIS, Shift_JIS, ISO-2022-JP, BIG-5 で書かれた PHP スクリプトは、動作しない可能性があります。
文字エンコーディングの問題点について精通していない限り、内部エンコーディングとして使用するべきではありません。
UTF-8 もしくは EUC-JP を推奨します。
*注
MySQL は、 4.1 から内部処理コードが UTF-8 に変わっています。
PHP でデータベースを操作する場合は、データベースで使用する文字セットに PHP の内部エンコーディングを一致させたほうが、より効率的です。
MySQL を導入する予定がある場合は、すべての文字コードを UTF-8 に統一することを推奨します。
*注
mbstring(日本語などのマルチバイトストリング関数)を使用するには、php.ini の拡張機能で "extension=php_mbstring.dll" が有効になっていなければなりません。
参照:
PHP5.1.1 のインストールと設定 - php.ini の設定
説明
使用する関数
| 名称 |
説明 |
初期値 |
変更の可否 |
対応 |
| default_charset |
デフォルトの文字セット |
'' |
PHP_INI_ALL |
|
| output_buffering |
出力バッファリングの有効・無効 |
'0' |
PHP_INI_PERDIR |
|
| output_handler |
出力変換の有効・無効 |
NULL |
PHP_INI_PERDIR |
php >= 4.0.4 |
| mbstring.language |
デフォルトの言語 |
'neutral'(utf-8) |
PHP_INI_PERDIR |
php >= 4.3.0 |
| mbstring.encoding_translation |
内部文字エンコーディングの有効・無効 |
'0' |
PHP_INI_PERDIR |
php >= 4.3.0 |
| mbstring.http_input |
HTTP入力文字エンコーディング |
'pass' |
PHP_INI_ALL |
php >= 4.0.6 |
| mbstring.http_output |
HTTP出力文字エンコーディング |
'pass' |
PHP_INI_ALL |
php >= 4.0.6 |
| mbstring.internal_encoding |
内部文字エンコーディング
*注
mbstring.languageの下位に書く必要があります。
|
NULL |
PHP_INI_ALL |
php >= 4.0.6 |
| mbstring.substitute_character |
無効な文字の代替出力の有効・無効 |
NULL |
PHP_INI_ALL |
php >= 4.0.6 |
【変更の可否の定数と意味】
| 定数 |
意味 |
| PHP_INI_PERDIR |
php.ini, .htaccess または httpd.confで設定可能なエントリ |
| PHP_INI_ALL |
どこでも設定可能なエントリ |
以下のいずれかひとつの方法で設定します。
php.ini での設定
UTF-8 で作成・保存して、 UTF-8 で表示させる場合
output_buffering = Off
output_handler = none
default_charset = UTF-8
mbstring.language = ja
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.internal_encoding = UTF-8
mbstring.substitute_character = none
UTF-8 で作成・保存して、 Shift_JIS で表示させる場合
output_buffering = On
output_handler = mb_output_handler
default_charset = Shift_JIS
mbstring.language = ja
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.internal_encoding = UTF-8
mbstring.substitute_character = none
EUC-JP で作成・保存して、 EUC-JPで表示させる場合
output_buffering = Off
output_handler = none
default_charset = EUC-JP
mbstring.language = ja
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.internal_encoding = EUC-JP
mbstring.substitute_character = none
EUC-JP で作成・保存して、 Shift_JIS で表示させる場合
output_buffering = On
output_handler = mb_output_handler
default_charset = Shift_JIS
mbstring.language = ja
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.internal_encoding = EUC-JP
mbstring.substitute_character = none
PHP スクリプトでの設定
mbstring 関連の ini_set() 関数は、期待通りに設定されない場合があります。
直接、 mbstring を設定する関数を使用することをお勧めします。
関数の説明
| 名称 |
説明 |
初期値 |
対応 |
| ob_start |
出力のバッファリングをオンにする |
'' |
php >= 4 |
| ob_end_clean |
出力バッファをクリアしてバッファリングをオフにする
|
void |
php >= 4 |
| default_charset |
デフォルトの文字セット |
'' |
php >= 4 |
| mb_language |
デフォルトの言語 |
'neutral'(utf-8) |
php >= 4 |
| mb_http_input |
HTTP入力文字エンコーディング |
'pass' |
php >= 4 |
| mb_http_output |
HTTP出力文字エンコーディング |
'pass' |
php >= 4 |
| mb_internal_encoding |
内部文字エンコーディング
*注
mb_languageの下位に書く必要があります。
|
NULL |
php >= 4 |
| mb_substitute_character |
無効な文字の代替出力の有効・無効 |
NULL |
php >= 4 |
UTF-8 で作成・保存して、 UTF-8 で表示させる場合
UTF-8 で作成・保存して、 Shift_JIS で表示させる場合
EUC-JP で作成・保存して、 EUC-JP で表示させる場合
EUC-JP で作成・保存して、 Shift_JIS で表示させる場合
.htaccessでの設定