stringaddslashes 半角¥が消える
form(POST)で変数をSQL文のinsertを用いてDBにいれていました。
ある日、アポストロフィ(シングルクォーテーション)の入っている変数があった場合、insert自体がうまくいっておらず、レコードが作られていないことに気づきました。
mysql_connect 以降 insert 以前に、
「mysql_real_escape_stringaddslashes」をいれることで、シングルクォーテーションも
問題なくinsertされるようになりましたが、半角エンマーク(バックスラッシュ?)を入れた場合にその文字が消えてDBに格納されます。
エスケープの記号とみなされてしまいます。
たとえば商品の値段として「\100」と書こうとしても、「100」になってしまいます。
全角でも閲覧するには支障がないので、
str_replace('\','¥',$str); のように修正しようとしてもうまくいきませんでした。
エスケープにエスケープしようとして、
str_replace('\','\\',$str); のように修正しようとしてもうまくいきませんでした。
最悪addslashesに変えないとダメかと思っていますが、
どうもaddslashesのほうはセキュリティ上、前者に劣るとも聞きましたので、このままなんとか「mysql_real_escape_stringaddslashes」で行きたいのですが。
うまい方法があるでしょうか?
お礼
どうやら、Paramaterを使ったinsert文だったためにこの問題が出てしまったようです。 "\\"を考慮し、直接SQL文を作成するように変更したら上手くいきました。 ありがとうございました!
補足
実は私もそう思い、'\'を'\\'に置換してから登録してみたのですが、結果は同じく文字化けが発生してしまいました。 直接'\\'を入力した場合も全角文字が文字化けしてしまいました。 ですが、Accessなどからの直接入力の場合は'\'を入力しても文字化けが発生しません・・・