- 締切済み
文字化けの原因を教えてください。
WindowsでスクリプトをEUCで保存し、シフトJISでブラウザへ出力ときの 設定として以下のようにphp.iniを設定しています。 ~php.ini~ output_buffering = On output_handler = mb_output_handler magic_quotes_gpc = Off default_charset = Shift_JIS extension_dir = C:/php/ext extension=php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none ~php.ini~ mb_detect_encodingでDBから取得した値の文字コードは、SJISでした。 mb_convert_encoding($dbdata,"EUC-JP","SJIS")で正しく表示されます。 iniファイルの設定のみで正しく表示するにはどのように設定するのがいいのでしょうか?それとも、このような文字コード変換は必須なのでしょうか? よろしくお願いします。 [PHP使用環境] PHP=5.1.6 OS=Windows2000 PRO webserver=apatch2.0 [DB環境(リモートサーバ)] DB=MS SQL Server2000 OS=Windows2003 server R2
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- calltella
- ベストアンサー率49% (317/635)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="ja"> <meta http-equiv="content-type" content="text/html; charset=SHIFT-JIS"> <head> <title>hoge</title> </head> <?php print("ユーザ名:".$myAuth->getAuthData("unam")); ?> DBの文字コードがSHIFT-JISであれば上記でいけますが そうでなければEUCに変換してからブラウザ出力しか方法はありません。
- maura
- ベストアンサー率46% (48/104)
スクリプトがEUCなので、 DBのデータをEUC変換するのは必須です。
- calltella
- ベストアンサー率49% (317/635)
最終的に画面に表示しているのはブラウザなので ブラウザの文字コードを設定する必要があります。 <meta http-equiv="content-type" content="text/html; charset=SHIFT-JIS">
補足
回答ありがとうございます。 下記のようなPHPスクリプトを実行しているような場合 <?php print("ユーザ名:".$myAuth->getAuthData("unam")); ?> はどこにどのように記述すれば良いのでしょうか?
お礼
回答ありがとうございます。 早速ためしましたが、テキストエディター(ひで○)で保存しようとしたら 文字コード変換ができない文字があると怒られてしまいました。 一応表示も試みましたが結局変わらずでした。 また、DBの文字コードはどのようにすればわかるのでしょうか。 一応mb_detect_encodingでDBから取得した値の文字コードは、SJISでした。