PHP+MySQLで文字化けします
PHPでMySQLに接続して以下のように
テーブルの作成・そのテーブルにInsertをすると文字化けします。
PHPサーバーの文字コードはEUC-JP、MySQLの文字コードはlatin1です。
PHPのバージョンは5.04でMySQLのバージョンは4.1.20です。
無料レンタルサーバーなので詳細な設定は変更できません。
<?php
// データベースに接続し、選択する
mb_language('Japanese');
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
$link = mysql_connect('localhost',"user","password")
or die('Could not connect: ' . mysql_error());
echo 'Connected successfully';
mysql_select_db('user') or die('Could not select database');
mysql_query("SET NAMES UTF-8",$link);
// SQL クエリを実行する
$name = 'test';
$query = "CREATE TABLE IF NOT EXISTS `$name` (
`id` varchar(50) primary key,
`name` varchar(50),
`pw` varchar(50)
);";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$query = "INSERT INTO $name (id, name) VALUES('test', 'テスト');";
$mojicode = mb_detect_encoding($query);
$query = mb_convert_encoding($query, "UTF-8", "$mojicode");
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
// HTML に結果を出力する
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// 結果セットを開放する
mysql_free_result($result);
// 接続を閉じる
mysql_close($link);
?>
まだまだPHP、MySQL共に技術が未熟なため
説明不足な部分が多々あるかと思いますがご教授お願いします。
補足
ごめんなさい、それはもう試してました $tempName = mb_convert_encoding($row["name"], "EUC-JP","ASCII"); とし、試してみましたがasciiのままでした。 変換できないときはそのままっぽいです