dポイントプレゼントキャンペーン実施中!

レンタルサーバーでMYSQLとPHPを使用したいのですが、PHPからINSERTした文字が、phpmyadminの画面だけで文字化けしてしまいます。


MySQLの文字コード設定は UTF-8 Unicode (utf8) で、照会順序も utf8_unicode_ci です。

INSERTする文字もINSERT直前に文字コードを変更し、確認したところutf8になっています。
コードは以下のとおり。

<?php
$sql = mb_convert_encoding("$info","UTF-8");
$mojicode = mb_detect_encoding($info,mb_list_encodings());
print "$info の文字コードは $mojicode です。";
?>

PHPでMySQLからデータをSELECTで表示させた際は、文字化けせずに表示されます。
表示させるサイトの文字コードはutf-8です。
表示させる前に文字コードを変換させています。

スクリプトは以下のとおり。

<?php

//文字コード
$enc_disp = "utf-8";
$enc_db = "utf-8";

//データの文字コードを変換する関数
function cnv_enc($string, $to, $from) {
//文字コードを変換する
$det_enc = mb_detect_encoding($string, $from . "," . $to);
if ($det_enc and $det_enc != $to) {
return mb_convert_encoding($string, $to, $det_enc);
}
else {
return $string;
}
}

//データベースに接続
$conn=mysql_connect($sv, $user, $pass) or die("接続エラー");
mysql_select_db($dbname) or die ("接続エラー");

//データを取り出す
//取りだすレコードの開始位置
$st=0;
//取りだす最大レコード数
$lim=5;

$sql = "SELECT number,date,info FROM info ORDER BY date DESC LIMIT $st,$lim;";

$res = mysql_query($sql, $conn) or die ("データ抽出エラー");

//mysql_query()関数でデータを取り出すSQLを実行する
//取り出したデータを表示する


echo "<table border=\"0\" id=table>";
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
echo"<tr>";
echo"<td colspan='2'>".' ・ '.$row["date"].' / '.cnv_enc($row["info"], $enc_disp, $enc_db)."</td>";
echo"</tr>";
}
echo "</table>";

?>

なお、表示する際、文字コードを変更する前にデータの文字コードを調べたところ、ASCIIとなっていました。
phpmyadminに入った際にASCIIになったのでしょうか?

解決策がわからず困っています。

どなたか解決策を教えていただけないでしょうか。
よろしくおねがいします。

A 回答 (1件)

まったく同じ症状なのかはわかりませんが・・・



わたしも、WindowsXP上に開発環境を作った当初、DBに格納された日本語を phpMyAdmin 上で表示させようとしたときだけ、文字化けしてしまう症状に悩まされていました。

当方の環境は、MySQL 5.0.24、PHP 5.2.2、phpMyAdmin 3.0.0です。

ネットでは同類の症例がいくつもみつかり、対策とされる設定を片っ端から試しても解決しなかったのですが、ある日突然きちんと表示されるようになりました。

たぶん、「正しい」設定がなされたまま、Windows(IIS)やMySQLが再起動されたことがよかったのかな?なんて想像していますが。

関係しそうな設定箇所は、以下のようになっています。外していたらすみませんが、いかがでしょうか?


■C:\Program Files\MySQL\MySQL Server 5.0\my.ini

[mysqldump]
default-character-set = utf8
[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
[mysql]
default-character-set=utf8


■C:\WINDOWS\php.ini
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8

■phpMyAdmin\libraries\config.default.php
$cfg['DefaultLang'] = 'utf-8';
$cfg['DefaultConnectionCollation'] = 'utf8_general_ci';
$cfg['DefaultCharset'] = 'utf-8';

この回答への補足

ご回答ありがとうございます。
ローカルのときはMySQLの設定をいじって解決したのですが、今回はレンタルサーバーなので、MySQLの設定を変更することができずなかなか大変ですね。

php.iniとconfigdefault.phpも試してみましたが改善しませんでした。
他に原因があるようです。

ありがとうございました。

補足日時:2011/02/28 10:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!