• ベストアンサー

PHPの文字化け回避方法

PHPとDB(MySQL)を使用したアプリケーションを作成しています。 しかし特定の文字(表や能など)をDBに入力し再度PHPで表示すると文字化けします。 調べて対策を行いましたが改善されません。 (対策) DBに格納する前にデータをすべてmb_convert_encoding($goo, "EUC-JP", "SJIS");でエンコード 読み込む際にはmb_convert_encoding($goo, "SJIS", "EUC-JP")と戻す。 又、magic_quotes_gpcもoffに。 しかしながら一向に改善されません。どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

以下をご確認願います 1)php.ini 設定ですが、マルチバイトに関する設定はどうなっていますか? 通常はPHPの内部エンコーディングはEUC-JPが推奨ですので 2)PHPスクリプト,HTMLファイルの文字コードはすべてEUC-JPにしておきます。 HTMLファイルのメタ属性で <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> と追加しておくといいでしょう。 文字化けの大半は上記が正しく指定されていないのに原因があります。 .htaccess設定が可能ならば、 php_flag mbstring.http_input=EUC-JP php_flag mbstring.http_output=EUC-JP php_flag mbstring.internal_encoding=EUC-JP php_flag mbstring.encoding_translation=Off を指定しましょう。(この設定の場合にはHTML,PHPともにEUC-JPの漢字コードでファイル作成の必要あり) EUC-JPでの日本語表示はブラウザ側で自動的に判別して表示しますので、心配ありません。 また、データベースの内部文字の扱いはたぶん、EUC-JPとは思いますが、念のためご確認をした法がいいかと。

Intel_404
質問者

お礼

回答ありがとうございます。 >php.ini 設定ですが、マルチバイトに関する設定はどうなっていますか? magic_quotes_gpc = off のみとなっています。 ><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> と追加しておくといいでしょう。 はい、追加しましたがだめでした。文字化けは特定な漢字のみです。 ご指摘いただきましたhtaccess設定ですが、後ほど行い報告させていただきます。

Intel_404
質問者

補足

遅くなってすいません。 .htaccessの設定をし、php.iniも別のサイトを参考に設定し直しましたら文字化けが解消いたしました。 本当にありがとうございました。

その他の回答 (2)

  • briant-jr
  • ベストアンサー率50% (5/10)
回答No.3

表や脳などのSJISコードの中にはバックスラッシュに相当するコードが含まれています。そのため文字化けが起こります。 addslashes()関数を用いて表示する文字中のバックスラッシュをエスケープするとよいのではないでしょうか? magic_quotes_gpc = off が設定されているということですので、表示のときにエスケープしたバックスラッシュが見えるということはないと思います。

参考URL:
http://jp2.php.net/manual/ja/function.addslashes.php
Intel_404
質問者

お礼

なるほど、addslashes()関数ですね。 大変参考になりました。ありがとうございました。

  • cyanberry
  • ベストアンサー率50% (117/230)
回答No.1

DBはsjisで使わなければならないのですか? DBもEUCでエンコーディングするようにしたら大丈夫だと思いますが。SJISはよく文字化けるので自分は使いません。

Intel_404
質問者

補足

回答ありがとうございます。 ごめんなさい、知識不足でよく分からないのですがsjisでDBに格納ということですか? 又、SJISをご使用にならないとのことですが、SJISを使わないで日本語を表示するにはどうしたらいいのでしょうか? よろしくお願いいたします。