この点、Shift-JISでのテンプレート出力はうまくいったのですが、
テンプレートからのデータベースへの登録がどうしてもうまく行きません。
具体的には、PHPファイルから実行すべきsql文を、
phpMyAdminから実行すると正しく登録できるのですが、
PHPファイルからだと日本語部分が文字化けを起こします。
8時間以上はまっておりますので、
恐れ入りますがご教授くださいますよう、お願いいたします。
■smarty関連
version 2.6.22
■MySQL関連
クライアントversion: 4.1.22
文字セット: UTF-8 Unicode (utf8)
接続照合順序: UTF-8 Unicode (utf8)
■PHP関連
Version 5.2.8
mbstring.http_input:pass
mbstring.http_output: pass
mbstring.internal_encoding: no value
mbstring.language: Japanese
■html(テンプレート)関連
metaタグ: <meta content="text/html; charset=Shift-JIS" http-equiv="content-type">
ファイル自体の文字コード: EUC
■MySQL関連
クライアントversion: 4.1.22
文字セット: UTF-8 Unicode (utf8)
接続照合順序: UTF-8 Unicode (utf8)
まず、この設定が間違っています。
MySQL(サーバ)のバージョンが4.1.22ですよね?
my.cnf を以下のように変更/追加してください。
[mysqld] default-character-set = sjis [mysqldump] default-character-set = sjis [mysql] default-character-set = sjis
■html(テンプレート)関連
metaタグ: <meta content="text/html; charset=Shift-JIS" http-equiv="content-type">
ファイル自体の文字コード: EUC
次にこの設定も間違っています。charset=Shift-JIS を指定しているのですから、ファイルもシフトJISにしなければなりません。
■PHP関連
mbstring.internal_encoding: no value
これは間違いではありませんが、PHP内で日本語の処理をしているなら、no value ではなく SJIS にしてください。no value のままだと検索・置換などの処理で不具合が起きる場合があります。
ご回答ありがとうございます。
まず利用中のサーバーではmy.cnfが修正できませんので、
一旦以下のような設定をしました。
■MySQL関連
文字セット: UTF-8 Unicode (utf8) ←変更不可
接続照合順序: sjis_japanese_ci
■テンプレート関連
ファイル自体の文字コード: Shift-JIS
■エンコード関連(.htaccessによる)
php_value mbstring.internal_encoding SJIS
■エンコード関連(php内での処理)
一旦、全て元に戻す
これでも解決はせず、
さらにデータベースから呼び出した文字が化けてしまいました。
ですので以下の方法を試しました。
■phpファイルに以下の文を挿入
~結果~
・DBからの文字呼び出し → 正常
・テンプレート直書き文字呼び出し → 文字化け
・テンプレートからDBへの登録 → 文字化け
【ファイルA.php】
--------------------------------
~省略~
function SJIS_Encoding($tpl_output, &$smarty){
$tpl_output = mb_convert_encoding($tpl_output,'Shift-JIS','EUC-JP');
return $tpl_output;
}
--------------------------------------------
【ファイルB.php(実行ファイル)】
--------------------------------
require_once( "ファイルA.php" );
~省略~
$smarty->register_outputfilter("SJIS_Encoding");
$smarty->display( "ファイルA.tpl" );
--------------------------------------------
■ファイル自体の文字コードをEUCで保存
~結果~
・DBからの文字呼び出し → 正常
・テンプレート直書き文字呼び出し → 正常
・テンプレートからDBへの登録 → 文字化け
■phpファイルに以下の文を挿入
~結果~
・DBからの文字呼び出し → 正常
・テンプレート直書き文字呼び出し → 正常
・テンプレートからDBへの登録 → 文字化け
【ファイルA.php】
--------------------------------
~省略~
function convert_encoding_to_eucjp($template_source, &$smarty) {
if (function_exists("mb_convert_encoding")) {
$enc = mb_detect_encoding($template_source, "auto");
if ($enc != "EUC-JP") {
return mb_convert_encoding($template_source, "EUC-JP", $enc);
}
}
return $template_source;
}
--------------------------------------------
【ファイルB.php(実行ファイル)】
--------------------------------
~省略~
$smarty->register_prefilter('convert_encoding_to_eucjp');
--------------------------------------------
このような状態です。
恐れ入りますがご教授願います。