• ベストアンサー

文字化け

文字コードをEUCにて統一しているにも関わらず、 結果画面をみると下記のように化けてしまいます。 原因を教えて頂きたく思います。 よろしくお願いします。 データを表示する ID 名前 出身 年齢 1 ???? ??? 30 2 ???? ??? 20 <html> <head> <title>データを表示する</title> </head> <body> <h3>データを表示する</h3> <?php // 表示文字コード $disp_enc = "EUC-JP"; // データの文字コードを変換する関数 function cnv_dbstring($string, $enc) { // 文字コードを変換する $det_enc = mb_detect_encoding($string); if ($det_enc and $det_enc != $enc) { return mb_convert_encoding($string, $enc, $det_enc); return mb_convert_encoding($string, $enc, $det_enc); } else { return $string; } [DB接続部分省略] // 取り出したデータを表示する echo "<table border=\"1\">"; echo "<tr>"; echo "<td>ID</td>"; echo "<td>名前</td>"; echo "<td>出身</td>"; echo "<td>年齢</td>"; echo "</tr>"; while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".cnv_dbstring($row["nam"], $disp_enc)."</td>"; echo "<td>".cnv_dbstring($row["pre"], $disp_enc)."</td>"; echo "<td>".$row["ag"]."</td>"; echo "</tr>"; } echo "</table>"; ?> </body> </html>

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

  • ベストアンサー
noname#14871
noname#14871
回答No.4

// 表示文字コード $disp_enc = "EUC-JP"; とありますが、以後、$encの定義が見当たりませんが、 // データの文字コードを変換する関数 function cnv_dbstring($string, $enc) { で、$enc は $disp_enc の誤記ではありませんか?

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>決め打ちとは具体的にはどのようにして、実施するのですか? $det_enc = mb_detect_encoding($string); を $det_enc = "EUC-JP"; のようにすることです。 mysqlで設定されている文字コードが決まっているはずなので、それを設定します

noname#14871
noname#14871
回答No.2

WEBサーバはapache2でしょうか? apapche2の場合、httpd.confの AddDefaultCharset ISO-8859-1 の部分をコメント化しないと文字化けすると聞いてます。 #AddDefaultCharset ISO-8859-1

参考URL:
http://www.stackasterisk.jp/tech/systemConstruction/apache03_01.jsp
rapid6
質問者

お礼

はい。apache2です。 ご指摘の点を直したところ、 一部文字化けは解消されました。 残りは自力で解決したいと思います。 ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

mb_detect_encoding は、使用されている文字コードを勘違いする場合があります。 文字コードがあらかじめわかっているとして、決め打ちでやってみて化けるかどうかを調べてみてはどうでしょうか

rapid6
質問者

補足

ご回答ありがとうございます。 決め打ちとは具体的にはどのようにして、 実施するのですか? よろしくお願いします。

関連するQ&A

専門家に質問してみよう