- ベストアンサー
MySQLへデータ入力時の文字化け
- PHPで作成したWEBページでMySQLのデータを更新すると、特定文字のみ文字化けします。文字化けすると”嵐閨”という文字になります。
- phpMyAdminから同じテーブルへ”予定”という文字を入力すると、問題なく表示されています。
- PHPで作成したコマンド・コードが悪いのではなく、httpd.confやphp.iniの設定が悪いように思うのですが、何が悪いのか分かりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$sql全体をエスケープするのじゃなくてセットする値のみをエスケープします。 この場合は $location= mysql_escape_string($location); $color= mysql_escape_string($color); $sql = "update location_tbl set location = '$location', color = '$color'"; $resultId = mysql_query($sql); になります。
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
予定 97 5C 92 E8 嵐閨 97 92 E8 81 予定の予に含まれる5C(アスキー文字で\)が取り除かれたための文字化けと思われます。 MySQLに文字をinsertする前に文字をmysql_escape_string()でエスケープしてないのではないでしょうか。
お礼
回答ありがとうございます。 おっしゃる通りの不具合でした。 「予\定」と入力すると、正常に表示されました。 mysql_escape_string()を以下のように作ってみたのですが、データの更新に失敗してしまいます。 $location = "社長室"; $color = "#FFFFFF" $sql = "update location_tbl set location = '$location', color = '$color'"; print "$sql"; $sql = mysql_escape_string($sql); print "$sql"; $resultId = mysql_query($sql); mysql_escape_string()の前後に$sqlをプリントさせたところこのようになりました。 前: update location_tbl set location = '社長室', color = '#FFFFFF' 後: update location_tbl set location = \'社長室\', color = \'#FFFFFF\' mysql_escape_string()は成功しているようなのですが、 データベースの更新に失敗している理由が分かりません。 ご指導お願いします。
お礼
二度にわたる親切な回答に感謝しております。 重ね重ねありがとうございます。 回答に通りに変更したところ、正常に動作いたしました。 mysql_escape_stringについて、知識がなかったものでwebで調べたところsql全体をエスケープしていたものをみたもので使い方を誤って認識していました。 まったく同じモジュールを、Windowsのwebサーバーで動かすと、問題なく動くのが不思議です。 apache、php、MySQLともほぼ同じバージョンなのですが。 apache、php、MySQL等の言語の設定かとも思い、my.cnfファイルを変えたり、データベースオープン時にmysql_set_character_setを加えたりしてみたのですが、解決できませんでした。 問題が解決できとても助かりました。 ありがとうございました。