.htaccess で PHP の表示言語を切り替える

php_value, php_flag を使って自動文字コード変換をする tips です。
  
.htaccess:

# ソースの文字コード(SJIS, EUC-JP, UTF-8 など mb_convert_encoding()で指定する書式)
php_value mbstring.internal_encoding UTF-8
# ヘッダで表明する出力文字コード(Shift_JIS, EUC-JP, UTF-8 など Content-Type で指定する書式)
php_value default_charset Shift_JIS
# 変換に使う出力文字コード(mb_convert_encoding()で指定する書式)
php_value mbstring.http_output SJIS
# 変換文字コードが属する言語
php_value mbstring.language Japanese
# フォームなどの入力文字コードは自動判別させる
php_value mbstring.http_input auto
# 入力の自動変換を有効化(Off で無効化)
php_flag mbstring.encoding_translation On
# 出力の自動変換を有効化(空値で無効化)
php_value output_handler mb_output_handler

なお、動作には

1.CGI モードではなく PHP-CLIモードで動いていること
2. httpd.conf で AllowOverride Options または AllowOverride All など Options の変更ができるように設定されていること。

が必要です。


ちなみに余談ですが、同じことを .htaccess なしでやろうとした場合は次のようになります。

<?php
// 自動変換処理
mb_language(“Japanese”);
// ソース文字コード
mb_internal_encoding(“UTF-8”);
// 出力文字コード
mb_http_output(“SJIS”);
header(“Content-Type:text/html;charset=Shift_JIS”);
 
// mb_output_handler で出力をフィルタリング
ob_start(“mb_output_handler”);
register_shutdown_function(‘ob_end_flush’);
 
// 入力をフィルタリング
// (mb_convert_encoding($value, mb_internal_encoding(), “auto, UTF-8”);
// を使い、 $_REQUEST, $_GET, $_POST, $_COOKIE など入力変数を変換すればエミュレートできるが
// 長くなるので省略)
 
// —————————–
// あとは普通の処理
 
echo “はろーわーるど\n”;

参考:
AllowOverride ディレクティブ(Apache 2.2 リファレンス)
PHP 出力制御関数(php.net)