■バージョン情報
MySQL:4.1.22
PHP:5.2.6
phpmyadmin:2.11.1
色々なサイトを調べた感じではDB接続の際に「set names utf8」を指定するとよいとのことですが、書き方がわかりません。下記のソースに「set names utf8」を追加した書き方を教えて頂きたいと思います。
■フォームから入力データ受け取りDBへ書き込み
<?php
if (isset($_POST['mode']) and $_POST['mode'] == "add") {
$link = mysql_connect('サーバ名','接続ID','パスワード') or die("接続に失敗しました。");
$id = mysql_real_escape_string($_POST['id']);
$name = mysql_real_escape_string($_POST['name']);
mysql_select_db("demo") or die("接続できませんでした。");
$query = "insert into test values('" . $id . "','" . $name . "')";
mysql_query($query) or die("接続できませんでした。");
}
mysql_close($link);
?>
■DBを参照して出力
<?php
$db = mysql_connect('サーバ名','接続ID','パスワード');
if (! $db) {
die ("データベースに接続できません。");
}
$result = mysql_query("select * test",$db);
echo "<table border=0>\n";
while($row = mysql_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>\n";
echo "<td>" . $row['name'] . "</td>\n";
echo "</tr>\n";
}
echo "</table>\n";
mysql_close();
?>
mysql_select_db("demo") or die("接続できませんでした。");
mysql_query('set character set utf8');
ここに挿入です。
■フォームから入力データ受け取りDBへ書き込み
if (isset($_POST['mode']) and $_POST['mode'] == "add") {
$link = mysql_connect('サーバ名','接続ID','パスワード') or die("接続に失敗しました。");
$id = mysql_real_escape_string($_POST['id']);
$name = mysql_real_escape_string($_POST['name']);
mysql_select_db("demo") or die("接続できませんでした。");
$query = "insert into test values('" . $id . "','" . $name . "')";
mysql_query("set names utf8") or die("接続できませんでした。");#追加
mysql_query($query) or die("接続できませんでした。");
}
mysql_close($link);
?>
■DBを参照して出力
$db = mysql_connect('サーバ名','接続ID','パスワード');
if (! $db) {
die ("データベースに接続できません。");
}
mysql_query("set names utf8", $db);#追加
$result = mysql_query("select * test",$db);
・
・
・
文字化けはMySQLの文字コード設定も関係しますので、そちらも確認したほうが良いかもしれません。
下記URLに同じような問題が記載されていますので、ご参照くださいませ。
ありがとうございました。無事文字化けを解消できました。
MySQL :: MySQL 4.1 リファレンスマニュアル :: 9.3.6 接続のキャラクタセットおよび照合順序
set character set は、サーバに送信、および、受信時の文字コードを指定するもので、クエリーの結果も、保存されているデータの文字コードに影響されず、指定した文字コードに変換されて得られることになります。
....と、まぁ、set character set の話はそうなんですが、文字化けする理由はたくさんあります。set charactert set の話は PHP のプログラムと MySQL との間の文字コードを指定した、というだけで、PHP 自体の文字コードや、Web サーバがブラウザに渡す時の文字コード、ブラウザが「この文字コードだ!」と判定した文字コード、など、データが処理される様々な場面で、「思い違い」があると、文字化けは発生します。
もし、この処置で文字化けが直ったら、ひとまず、
ということは言えますが、厳密に言うと、Web サーバとブラウザの間が UTF-8 であることすら保証できません(やろうと思えば、PHP の中で UTF-8 を Shift-JIS に変換して送ることも可能)。
なので、この措置で文字化けが直らなくてもめげないように(^^;
アドバイスありがとうございました。今後も文字化けには悩まされそうですが、一つ一つ思い当たる原因を潰していくしかないですね。
回答ありがとうございます。
DBを参照して出力する場合はどうすれば宜しいでしょうか?