- 締切済み
初歩的な質問ですが、文字化けについて
PHP初心者です。環境はRedHatLinux8.0とphp4.2.2を使用しています。10日で覚えるPHPを参考に環境設定をapache,phpはインストール完了し、おなじみの ハローHello,PHP! 練習用のフォルダ usr/local/apache/htdocs に作成。表示を確認したら文字化けが起こっていました。 *結果* KK ello, PHP! 環境設定の部分で /usr/local/lib/php.iniファイルの [mbstring] ・・・ mbstring.substitute_character = none; output_buffering = On output_handler = mb_output_handler default_charset = Shift_JIS ←この部分が気になるのですがこれでよろしいのでしょうか? アドバイスお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mason
- ベストアンサー率56% (9/16)
回答No.1
phpファイルのエンコードはEUCでしょうか? EUCなら、php.iniを下記のように Shift_JISで書いている場合は、参考URLをみてください。 mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.detect_order = auto default_charset = Shift_JIS この場合、phpはEUCでブラウザーにはShift_JISで表示します。また<meta>で文字エンコードを指定したほうがいいですよ。
お礼
根気よく設定を何度も思考錯誤しながら変更した結果、私の場合以下のようになりました。 ★php.iniの内容 [mbstring] ;; 出力のバッファリングを無効に output_buffering = Off ;; HTTP charsetヘッダを設定 default_charset = EUC-JP ;; デフォルトの言語を日本語にする mbstring.language = Japanese ;; HTTP 入力変換を有効にする mbstring.encoding_translation = On ;; HTTP 入力エンコーディング変換をautoに設定 mbstring.http_input = auto ;; 内部エンコーディングをUTF-8に設定 mbstring.internal_encoding = UTF-8 ;; HTTP出力をUTF-8に設定 mbstring.http_output = UTF-8 ;; 無効な文字を出力しない mbstring.substitute_character = none ;; 出力の変換を有効にするために mb_output_handler を設定 output_handler = mb_output_handler デフォルト上でUTF-8を指定することにより、文字化けは解消されました。なぜUTF-8を指定しなければならないかは疑問が残りますが・・・?
補足
Linux環境では、文字コードはEUCで、改行コードはLFで標準設定されているみたいです。 参考URLを確認し、設定を 『例 2. EUC-JP ユーザ用のphp.iniの設定』 に設定し、<meta ... charset=Shift_JIS>も付け加えて、ブラウザで表示を確認すると、初期状態ではやはり文字化けで表示されてしまいました。 xxxxx Hello, PHP! (xは文字化け部分) 文字エンコーディングを『Unicode(UTF-8)』に変更すると、 ハロー Hello, PHP! 結果的に表示されるようになるのですが、文字エンコーディングを行わないで、で初期結果を得るにはどうすればよろしいでしょうか? ちなみに参考URLの 『例 1. php.ini 設定の例』 及び、 『例 3. SJISユーザ用のphp.iniの設定』 の設定でも行ってみたのですが、ブラウザの初期状態でやはり文字化けが起こり、文字エンコーディング(ISO-8859-1,UTF-8,Shift_JIS,EUC-JP)も全てを試したのですが、日本語部分は文字化けは解消されませんでした。再度アドバイスありましたら、お願いします。