レスをありがとうございます。
「フォームからPOSTされたデータがeuc-jpなりutf-8なりになっている、という理解で宜しいでしょうか?(恐らく、フォームを表示しているHTMLが以前はeuc-jpだったのがutf-8になった、という事?)」
ハイ、そういうことです。
初心者のため言葉が不自由でうまく説明できないのですが、ご理解いただき有難いです。
フォームからpostされたデータが以前のものはeuc-jpになっています。
データはDBにeuc-jpで格納されています。
もともと英語用に書かれていたスクリプトを日本語で使用できるようにeuc-jpにエンコードしていました。下記がその一例です。
ところが新しいphpスクリプトでは全てutf-8にエンコードされました。
その結果、euc-jpでDBに格納されている古いデータが文字化けを起すようになりました。できればデータをutf-8で入れ替えする作業を行わずに、文字化けしないで出てくるようにしたいのですがいかがでしょうか。
「DBであればテーブルなりを分離して混ざらないようにした上で、何らかのラッパークラスを用意しておくとかしておかないと...」と書いてくださいましたが、難しいことなのでしょうか。
----------------------------------
mb_language('Japanese');
mb_internal_encoding('EUC-JP');
#2007-04-14#
# 件名文字化け対策にSubjectEncode関数追加
function subjectMime ( $str )
{
return (
mb_encode_mimeheader($str, 'ISO-2022-JP', 'B'));
}
function Jmime ( $str )
{
return (
mb_encode_mimeheader(J2jis($str), 'ISO-2022-JP', 'B'));
}
function J2jis ( $str )
{
return(
mb_convert_encoding($str,'JIS','EUC-JP'));
}
function errp ( $str )
{
global $jp_code;
print '<html>' . "\n" . '<head>' . "\n";
print '<meta http-equiv="Content-Type" content="text/html; charset=';
#2006-06-20#
# if ($jp_code == 'SJIS') {
#
echo 'Shift_JIS';
# } else {
#
echo $jp_code;
# }
if ($jp_code == 'SJIS' || $jp_code == 'SJIS-win') {
echo 'Shift_JIS';
} elseif ($jp_code == 'eucJP-win') {
echo 'EUC-JP';
} else {
echo $jp_code;
}
print '">' . "\n" . '<title>ERROR</title>' . "\n";
print '<style type="text/css">' . "\n";
print '<!--' . "\n";
print '.style2 {font-family: Geneva, Arial, Helvetica, san-serif}' . "\n";
print '.style3 {' . "\n";
print ' font-size: 14px;' . "\n";
print ' color: #000000;' . "\n";
print '}' . "\n";
print '-->' . "\n";
print '</style>' . "\n";
print '</head>' . "\n";
print '<body>' . "\n";
print '<br><br><center><font color="ff0000">' . $str . '</font></center><br>' . "\n";
print '</body>' . "\n" . '</html>';
}
$str = '';
foreach ($_POST as $key => $item) {
if ($key == 'aid') {
continue;
}
$str .= $item;
}
#2006-06-20#
#$jp_code =
mb_detect_encoding($str,'EUC-JP, SJIS, JIS, UTF-8', 'ASCII');
$jp_code =
mb_detect_encoding($str, 'EUC-JP, eucJP-win, SJIS, SJIS-win, JIS, UTF-8', 'ASCII');
if ($jp_code == 'ASCII') {
$jp_code = 'EUC-JP';
}
mb_http_output($jp_code);
ob_start("
mb_output_handler");
#------- 2005/10/28 $fromname をEUC-JPに
#2006-06-20#
#if (($jp_code == 'SJIS') && (
get_magic_quotes_gpc())) {
if (($jp_code == 'SJIS' || $jp_code == 'SJIS-win') && (
get_magic_quotes_gpc())) {
$fromname =
stripslashes($fromname);
}
if ($jp_code <> 'EUC-JP') {
$fromname =
mb_convert_encoding($fromname, 'EUC-JP', $jp_code);
}
#---

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。