![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
最近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]);
}
No.2ベストアンサー
- 回答日時:
> S-JISがいいのか、EUC-JPがいいのか?変更は簡単なのですが、どちらにすればよいか迷ってしまいます。
もちろん、EUC-JPでしょう。PHPはサーバーサイドスクリプトであるのでWindow'sでもLinuxでも対応できるコード体系でコーディングする習慣をつけておくほうがいいと思います。
> imap関数を使い、メールサーバに接続→メールのヘッダ、本文を読み込み→同一テーブルにインサート
> メールはおそらくS-JISで記載されているのでしょうか?
MacやLinuxマシンからメールが送信されることも考えられるので、元の文字コードを考慮しながらEUC-JPでテーブルに格納するのがいいでしょう。
> トリガーはあるリンクをクリックすると上記流れをやってくれます。
WindowsやLinuxのタスクスケジューラを利用して処理するのがいいと思います。
もっと時間間隔を短くしたいときは、「受信したメールをインサートする」phpファイルをサブフレームとして表示するHTMLファイルを作成し、そのHTMLファイル内に自分自身を一定時間ごとに更新するJavaScriptを埋め込んでおけばいいと思います。
だ
文字コードといういままで意識していなかったものを
現実的に教えてくださり、目からうろこが落ちる気分です。
これから文字コードを意識し開発に邁進していく所存です。
No.1
- 回答日時:
質問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がいいのか?
変更は簡単なのですが、どちらにすればよいか迷ってしまいます。
なるほど。回答ありがとうございました。質問1についてよく理解できました。
今回本にあったスクリプトを改造していますが、デフォルトでEUC-JPでした。S-JISに統一した方がよろしいでしょうか?
質問2についてまた補足させて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLです教えてくださいお願いし...
-
Accessでレコード削除ができな...
-
Accessでデータシートに同じデ...
-
このISAMでは、リンクテーブル・・
-
htmlコードで書かれた表にphpで...
-
Accessのテーブルデータを一気...
-
マスタデータ更新
-
ユニオンクエリで複数ファイル...
-
○SQL Server2000○複数テーブル...
-
重複クエリを使ったデータ削除
-
MySQLが不可
-
クエリとパススルークエリを作...
-
ACCESS2003でメニューバーを作...
-
ACCESSのクエリで、ランクテー...
-
Access VBAからエクセルに出力...
-
重複なしのフィールドにつき、...
-
男性と2人で飲食店に行きテーブ...
-
L2SWはARPテーブルを持っている?
-
SQL 現在のレコードより古い番...
-
update文で改行を入れる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
ビューのソートについて
-
マテリアライズドビューとスナ...
-
処理の途中で停止させ、再開さ...
-
MS Accessを共有した際にファイ...
-
構文エラー : 演算子がありませ...
-
accessでレコード更新直後の反...
-
ORA-01401が表示され、データが...
-
重複クエリを使ったデータ削除
-
Accessでの稼働日数計算の方法
-
住所のDBテーブル、マスターの...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
ACCESSで容量が50MBになった...
-
複数のテーブルを参照するselec...
おすすめ情報