全角で「~」を入力すると「?」がDBにインサートされる - PHPプロ!Q&A掲示板

1985

  • 0P

全角で「~」を入力すると「?」がDBにインサートされる

質問日時 / 2009年4月18日 00:18 (最終編集:4月18日 20:39)    回答数 / 3件

Questioner:  carjinal20  このエントリーをはてなブックマークに追加 

キーワード / PHP    MySQL   

またご質問させていただきます。

今まであまり意識した事がなかったのですが、テキスト入力をするフォームで、
全角の「~」という文字を入力すると、データベースに「?」がインサートされるという
問題が発覚してしまいました。(半角の~は実行されます)

私が使用している文字コードはUTF8です。
データ型は varchar または textです。
入力画面で入力し、入力確認画面を経て実行するという構造です。

確認画面では、データベースに接続する事がないせいか「~」は表示されるのですが、
その後、なぜか「?」がデータベースにインサートされてしまうようです。

私はサーバーにアップロードする前に、パソコン内のローカル環境で試してから
アップロードするのですが、ローカル環境では insert も update も select も
クエリを実行しません。何か考えられる原因があれば、ご指導いただけたら幸いです。
よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01NurseAngelわりと有名な波ダッシュ問題の一種かと思われます。
 ┣A01-1carjinal20ご指導、誠にありがとうございます。 あ、申し訳あ
 ┗A01-2carjinal20結果をご報告いたします。 検索エンジンから「波ダ

回答一覧

並び替え:

A01 満足
answererNurseAngel [4月18日 18:58] (最終編集:4月18日 19:14)

わりと有名な波ダッシュ問題の一種かと思われます。

http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5#Unicode.E3.81.AB.E9.96.A2.E9.80.A3.E3.81.99.E3.82.8B.E5.95.8F.E9.A1.8C
http://blog.livedoor.jp/sasata299/archives/51186273.html

UTF-8とWindowsは波ダッシュ(〜)とチルダ(~)がごっちゃになっているのでよく問題になります。
ただ、普通は?に文字化けするという問題で、SQL自体が発行されないというのは珍しいですね。

直しかたはPHPの設定やDBの設定にもよるので「こうすれば絶対大丈夫」という回答はないと思います。

・SQL文と実行結果を表示して実行されているか、成功しているか見てみる
・'SET NAMES'やmysql_set_charsetあたりを使って成功しないか試してみる
・直接"INSERT INTO table ( name )values( '〜' )"とか書いて試してみる

とかかなあ。

この意見に回答する

ツリーへ TOPへ

A01-1
replyercarjinal20 [4月18日 20:26]

ご指導、誠にありがとうございます。

あ、申し訳ありません。お伝えできていなかったのですが、実際のサーバーでは
おっしゃるとおり、「?」になっていました。

私はサーバーにアップロードする前に、パソコン内のローカル環境で試してから
アップロードするのですが、そのローカル環境で試した時にクエリが実行されなかったので
こうゆうご質問の仕方になってしまいました。

確かにおかしいですもんね。「?」になっていなければデータベースにインサート
されるはずがないですからね。

ありがとうございます。ご指導どおりに少し試してみたいと思います。

この意見に回答する

ツリーへ TOPへ

A01-2
replyercarjinal20 [4月20日 01:22]

結果をご報告いたします。

検索エンジンから「波ダッシュ」で検索したら、NurseAngelさんがおっしゃるような
問題がたくさん書かれていました。その中の改善策で、データベースの照合順序を
utf8_general_ci にしてみた方がいいというものがありました。
それを試してみたところ、「~」の形は表示されるようにはなりました。
ただこれが、波ダッシュなのか全角チルダなのかはちょっと分かりません。
今のところはこれでいくしかなさそうなのですが、私も詳しくないのでよく分かりませんが、
何か副作用が起こらなければいいなとは思っています。

ご指導、本当にありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)