【お題】甲子園での思い出の残し方

最近MySQLで勉強しだしたものです。

PHPを使って、MySQLにフォームデータを登録し、テーブルを見ると
文字がぐちゃぐちゃになっています。

質問1
これは仕様なのでしょうか?

ちなみにこんな文字でした
\Æ\¹\È ←“テスト”

PHPを介してこれを表示するとちゃんと「テスト」と表示
されます。

PHPがデコード、エンコードしてるのでしょうか?
それともこれがMySQLの仕様なのでしょうか?

質問2
いま特定のアドレスに受信したメールをインサートする
プログラムを書き、テーブルをみたところ、このデータだけ
ちゃんとした日本語で登録されていました。

Subject;テスト
本文;テスト

と打ったらそのとおり登録されています。

これをフォームデータと同じようなデータ形式に変換し登録する方法
があったら教えてください。

※1 HTMLの出力はEUC-JPのようです。
※2 本のプログラムを改造していますが、フォームデータ登録時、下のルーチンを通っています。
受信メールを登録するときはこのルーチンを介していません。

foreach ($data as $key => $value)
{
$data[$key] = preg_replace("/^(\s| )+$/", "", $data[$key]);
$data[$key] = strip_tags($data[$key]);
$data[$key] = stripslashes($data[$key]);
$data[$key] = mb_convert_kana($data[$key], "KV");
$data[$key] = htmlspecialchars($data[$key]);
$data[$key] = str_replace("\r\n", "<br>", $data[$key]);
$data[$key] = str_replace("\r", "<br>", $data[$key]);
$data[$key] = str_replace("\n", "<br>", $data[$key]);
$data[$key] = mysql_escape_string($data[$key]);
}

A 回答 (2件)

> S-JISがいいのか、EUC-JPがいいのか?変更は簡単なのですが、どちらにすればよいか迷ってしまいます。


 もちろん、EUC-JPでしょう。PHPはサーバーサイドスクリプトであるのでWindow'sでもLinuxでも対応できるコード体系でコーディングする習慣をつけておくほうがいいと思います。

> imap関数を使い、メールサーバに接続→メールのヘッダ、本文を読み込み→同一テーブルにインサート
> メールはおそらくS-JISで記載されているのでしょうか?
 MacやLinuxマシンからメールが送信されることも考えられるので、元の文字コードを考慮しながらEUC-JPでテーブルに格納するのがいいでしょう。

> トリガーはあるリンクをクリックすると上記流れをやってくれます。
 WindowsやLinuxのタスクスケジューラを利用して処理するのがいいと思います。
 もっと時間間隔を短くしたいときは、「受信したメールをインサートする」phpファイルをサブフレームとして表示するHTMLファイルを作成し、そのHTMLファイル内に自分自身を一定時間ごとに更新するJavaScriptを埋め込んでおけばいいと思います。
    • good
    • 0
この回答へのお礼

文字コードといういままで意識していなかったものを
現実的に教えてくださり、目からうろこが落ちる気分です。

これから文字コードを意識し開発に邁進していく所存です。

お礼日時:2008/01/03 13:34

 質問2は題意が不明確(メールをインサートする:あまり聞かない表現など)なので、質問1にだけ答えようと思います。



質問1
 PHPやMysqlが動作しているOS(Windows's系かLinux系か)がわかりませんが、入門編に使うWindow's→Apache→PHP→Mysqlで動作していると仮定して答えようと思います。「テーブルを見ると」の方法を「コマンドプロンプトでコマンドラインモードのMysql」を使用したとします。
 コマンドプロンプトはS-JISしか正しく表示できません。また、コマンドパラメタはS-JISで扱われます。これに対し「HTMLの出力はEUC-JP」ということなので、テーブルへの格納もEUC-JPで行われます。したがって、漢字フィールドを含む処理は、漢字フィールドが正しく表示・更新されません。このため、SOURCE命令が容易されていて、スクリプトファイルをEUC-JPで用意することによりMysqlをEUC-JP系で操作することができます。

この回答への補足

質問2について補足

メールをインサートするとは?

imap関数を使い、メールサーバに接続→メールのヘッダ、本文を読み込み→同一テーブルにインサート

したという理屈ですが、わかりますでしょうか?

特定の“メールアドレス”にメールを送れば、blogを更新できるシステムに作り変えたわけです。トリガーはあるリンクをクリックすると上記流れをやってくれます。

メールはおそらくS-JISで記載されているのでしょうか?
だから、ちゃんとした文字でテーブルに登録される?

S-JISがいいのか、EUC-JPがいいのか?
変更は簡単なのですが、どちらにすればよいか迷ってしまいます。

補足日時:2007/12/31 00:20
    • good
    • 0
この回答へのお礼

なるほど。回答ありがとうございました。質問1についてよく理解できました。

今回本にあったスクリプトを改造していますが、デフォルトでEUC-JPでした。S-JISに統一した方がよろしいでしょうか?

質問2についてまた補足させて頂きます。

お礼日時:2007/12/31 00:19

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

関連するカテゴリからQ&Aを探す