PHPの初心者です。PHPで文字化けしてしまい困っています。


■バージョン情報
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();
?>

回答の条件
  • 1人2回まで
  • 登録:2008/10/08 13:25:24
  • 終了:2008/10/10 12:12:17

回答(3件)

id:ctrl-v No.1

ctrl-v回答回数289ベストアンサー獲得回数152008/10/08 14:13:55

ポイント27pt

mysql_select_db("demo") or die("接続できませんでした。");

mysql_query('set character set utf8');

ここに挿入です。

id:finnapple

回答ありがとうございます。

DBを参照して出力する場合はどうすれば宜しいでしょうか?

2008/10/08 14:45:58
id:taramonera No.2

taramonera回答回数79ベストアンサー獲得回数52008/10/08 14:49:31

ポイント40pt

■フォームから入力データ受け取り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に同じような問題が記載されていますので、ご参照くださいませ。

http://oshiete1.goo.ne.jp/qa2670680.html

id:finnapple

ありがとうございました。無事文字化けを解消できました。

2008/10/10 12:10:00
id:JULY No.3

JULY回答回数966ベストアンサー獲得回数2472008/10/08 15:11:45

ポイント26pt

MySQL :: MySQL 4.1 リファレンスマニュアル :: 9.3.6 接続のキャラクタセットおよび照合順序

set character set は、サーバに送信、および、受信時の文字コードを指定するもので、クエリーの結果も、保存されているデータの文字コードに影響されず、指定した文字コードに変換されて得られることになります。

....と、まぁ、set character set の話はそうなんですが、文字化けする理由はたくさんあります。set charactert set の話は PHP のプログラムと MySQL との間の文字コードを指定した、というだけで、PHP 自体の文字コードや、Web サーバがブラウザに渡す時の文字コード、ブラウザが「この文字コードだ!」と判定した文字コード、など、データが処理される様々な場面で、「思い違い」があると、文字化けは発生します。

もし、この処置で文字化けが直ったら、ひとまず、

  1. PHP のプログラムと MySQL の間で、UTF-8 を使う、という認識で一致している。
  2. Web サーバとブラウザの間で文字コードの認識は一致している。

ということは言えますが、厳密に言うと、Web サーバとブラウザの間が UTF-8 であることすら保証できません(やろうと思えば、PHP の中で UTF-8 を Shift-JIS に変換して送ることも可能)。

なので、この措置で文字化けが直らなくてもめげないように(^^;

id:finnapple

アドバイスありがとうございました。今後も文字化けには悩まされそうですが、一つ一つ思い当たる原因を潰していくしかないですね。

2008/10/10 12:12:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません