人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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();
?>

●質問者: 雨の日
●カテゴリ:インターネット ウェブ制作
✍キーワード:ADD dB echo LINK MySQL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ctrl-v
●27ポイント

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

mysql_query('set character set utf8');

ここに挿入です。

◎質問者からの返答

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

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


2 ● taramonera
●40ポイント

■フォームから入力データ受け取り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

◎質問者からの返答

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


3 ● JULY
●26ポイント

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 に変換して送ることも可能)。

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ