仕事と晩飯とその他

日記です。

Windows98SE MySQL4.1 PHP5 文字化け 解決

MySQLでは日本語が使えるのにPHPでは化ける、どうやらよくある問題らしい。検索で一発解決というわけにはいかなかったが、試行錯誤しながら文字コードを統一することで解決した(と思う)。自分で解決しておきながらどれが最終的な決め手になったのかよくわかっていないうえに本当にこれでいいのかという確信すらないのがなんとも典型的な初心者。

Windows98SE
Apache2.2
MySQL4.1.22communicationserver
PHP5.2.5

PHP5.2.5でMySQLに接続した際に日本語のデータがうまく表示されない(文字化け)問題を解決するためにやってみたこと

1.MySQLのmy.iniの[mysqld]及び[mysql]の
default-character-setをSJISに。
→これでMySQLの日本語表示は解決。ただし、これ以前に作ったテーブルはうまく行かないので破棄。新規に作ったテーブルは全く問題ない。この直後にPHPを試して愕然とする。

2.PHPファイルで「SET NAMES SJIS」を実行するため接続する部分を以下に修正。
$conn=mysql_connect("DBサーバ名","接続ID","接続パスワード");
$rtn = mysql_query("set names 'sjis'", $conn);
PHPの文字化けは解決せず。

3.PHPphp.iniの[mbstring]に関わる部分を以下に修正。
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = auto
mbstring.script_encoding = UTF-8

4.PHPphp.iniのextension=php_mbstring.dllをコメントアウト
→3.4.の後にApacheを再起動すると日本語が表示された。ただし、PHPのechoで書いた日本語が化ける。

※ここで再度2.の「SET NAMES」をUTF8やEUCに変更して試してみる。これで表示が変わったので解決が近いことを感じる。

5.PHPのコードを書いたHTMLのcharsetをSHIFT_JISに。
<META http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS">
※練習用のつもりでHTMLのヘッダをきちんと記述していなかったので修正。
→これでもecho文の日本語が化ける。

6.練習用のphpファイルをSHIFT-JISで保存。
※エディターはterapad。「漢字/改行コード指定保存」で保存し直した。
→全て解決。LANのMacもPCも問題無し。イントラネットで使う予定なのでこれでよし。

以上。