- ベストアンサー
文字化け
文字コードを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>
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
// 表示文字コード $disp_enc = "EUC-JP"; とありますが、以後、$encの定義が見当たりませんが、 // データの文字コードを変換する関数 function cnv_dbstring($string, $enc) { で、$enc は $disp_enc の誤記ではありませんか?
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>決め打ちとは具体的にはどのようにして、実施するのですか? $det_enc = mb_detect_encoding($string); を $det_enc = "EUC-JP"; のようにすることです。 mysqlで設定されている文字コードが決まっているはずなので、それを設定します
WEBサーバはapache2でしょうか? apapche2の場合、httpd.confの AddDefaultCharset ISO-8859-1 の部分をコメント化しないと文字化けすると聞いてます。 #AddDefaultCharset ISO-8859-1
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
mb_detect_encoding は、使用されている文字コードを勘違いする場合があります。 文字コードがあらかじめわかっているとして、決め打ちでやってみて化けるかどうかを調べてみてはどうでしょうか
補足
ご回答ありがとうございます。 決め打ちとは具体的にはどのようにして、 実施するのですか? よろしくお願いします。
お礼
はい。apache2です。 ご指摘の点を直したところ、 一部文字化けは解消されました。 残りは自力で解決したいと思います。 ありがとうございました。