- ベストアンサー
MySQLでテーブルを見ると文字がぐちゃぐちゃ
- MySQLでフォームデータを登録すると、テーブルを見ると文字が乱れて表示されます。PHPを介して表示すると問題なく表示されるため、PHPがデコード・エンコードしている可能性があります。それともMySQLの仕様なのでしょうか?
- 特定のアドレスから受信したメールをテーブルに登録すると、データは正しく登録されます。しかし、フォームデータと同じようなデータ形式に変換して登録する方法を知りたいです。
- HTMLの出力はEUC-JPのようで、データ登録時には特定のルーチンを通しています。受信メールを登録する場合はこのルーチンを介していません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> S-JISがいいのか、EUC-JPがいいのか?変更は簡単なのですが、どちらにすればよいか迷ってしまいます。 もちろん、EUC-JPでしょう。PHPはサーバーサイドスクリプトであるのでWindow'sでもLinuxでも対応できるコード体系でコーディングする習慣をつけておくほうがいいと思います。 > imap関数を使い、メールサーバに接続→メールのヘッダ、本文を読み込み→同一テーブルにインサート > メールはおそらくS-JISで記載されているのでしょうか? MacやLinuxマシンからメールが送信されることも考えられるので、元の文字コードを考慮しながらEUC-JPでテーブルに格納するのがいいでしょう。 > トリガーはあるリンクをクリックすると上記流れをやってくれます。 WindowsやLinuxのタスクスケジューラを利用して処理するのがいいと思います。 もっと時間間隔を短くしたいときは、「受信したメールをインサートする」phpファイルをサブフレームとして表示するHTMLファイルを作成し、そのHTMLファイル内に自分自身を一定時間ごとに更新するJavaScriptを埋め込んでおけばいいと思います。 だ
その他の回答 (1)
- tannoy-fan
- ベストアンサー率38% (88/226)
質問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系で操作することができます。
お礼
なるほど。回答ありがとうございました。質問1についてよく理解できました。 今回本にあったスクリプトを改造していますが、デフォルトでEUC-JPでした。S-JISに統一した方がよろしいでしょうか? 質問2についてまた補足させて頂きます。
補足
質問2について補足 メールをインサートするとは? imap関数を使い、メールサーバに接続→メールのヘッダ、本文を読み込み→同一テーブルにインサート したという理屈ですが、わかりますでしょうか? 特定の“メールアドレス”にメールを送れば、blogを更新できるシステムに作り変えたわけです。トリガーはあるリンクをクリックすると上記流れをやってくれます。 メールはおそらくS-JISで記載されているのでしょうか? だから、ちゃんとした文字でテーブルに登録される? S-JISがいいのか、EUC-JPがいいのか? 変更は簡単なのですが、どちらにすればよいか迷ってしまいます。
お礼
文字コードといういままで意識していなかったものを 現実的に教えてくださり、目からうろこが落ちる気分です。 これから文字コードを意識し開発に邁進していく所存です。