プロ・クリエータの実践ウェブテクニック集



日本語文字セットの設定

 日本語で 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 で表示させる場合

<?php ob_end_clean(); default_charset('UTF-8'); mb_language('ja'); mb_http_input('auto'); mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); mb_substitute_character(null); ?>

UTF-8 で作成・保存して、 Shift_JIS で表示させる場合

<?php ob_start('mb_output_handler'); default_charset('Shift_JIS'); mb_language('ja'); mb_http_input('auto'); mb_http_output('SJIS'); mb_internal_encoding('UTF-8'); mb_substitute_character(null); ?>

EUC-JP で作成・保存して、 EUC-JP で表示させる場合

<?php ob_end_clean(); default_charset('EUC-JP'); mb_language('ja'); mb_http_input('auto'); mb_http_output('EUC-JP'); mb_internal_encoding('EUC-JP'); mb_substitute_character(null); ?>

EUC-JP で作成・保存して、 Shift_JIS で表示させる場合

<?php ob_start('mb_output_handler'); default_charset('Shift_JIS'); mb_language('ja'); mb_http_input('auto'); mb_http_output('SJIS'); mb_internal_encoding('EUC-JP'); mb_substitute_character(null); ?>

.htaccessでの設定