• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入力文字に\マークが入っている場合の扱い)

入力文字にバックスラッシュが含まれる場合の対応方法とは?

このQ&Aのポイント
  • 入力文字にバックスラッシュが含まれる場合、データベースへ保存する前にエスケープ処理を行うことが必要です。
  • バックスラッシュをダブルバックスラッシュに置換することで、正しく保存されます。
  • バックスラッシュをバックスラッシュに置換する方法もありますが、コピーアンドペーストの際に不具合が生じる可能性があるため注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

CakePHPは利用していないので詳しくはわかりませんが きちんとプレペアドステートメントでDBに投入していれば置換は必要ありません。 むしろ置換は戻す際に想定外の動きをする可能性もありお勧めできません

wave117
質問者

お礼

皆さま多方面からのご回答ありがとうございました。 原因は、$this->updataAll()を使っていたため、\がエスケープされずにそのままsqlが発行されたことでした。$this->save()を使うことでエスケープされた形でsqlが発行され問題は解決しました。 一番最初に回答をくださった方をベストアンサーに選びました。

その他の回答 (4)

noname#244856
noname#244856
回答No.5

多分バージョンが古いせいで以下の機能が有効になっているのでしょう。 PHP Manual - マジッククオート http://www.php.net/manual/ja/security.magicquotes.php これを無効にすればそれだけで解決します。というか相当古いバージョンなので最新版に乗り換えましょう。もし何らかの理由で無効化も更新も出来ない場合は以下の処理を通すことで解決できます。 if (get_magic_quotes_gpc()) { $str = stripslashes($str); } これを施したうえで…CakePHPを用いて開発しているのであれば何も「\」のことを特別扱いする必要はないはずです。CakePHPであんまりSQLべた書きとかしませんよね?自分でSQLをべた書きするにしても、PDOクラスやmysqliクラスのプレースホルダを用いている場合は同様です。 いわゆる明示的な「エスケープ」が必要になるのは、非推奨なmysql_queryなどの関数を使うときに限られます。 (参考リンク) http://qiita.com/mpyw/items/b2a2b0e8e60ed4680f06

回答No.4

PHPのバージョンはいくつでしょうか。 5.3以下で,マジッククオートを有効にしている,とかいうことはありませんか。 そうであるなら,マジッククオートを無効にして影響を調査・修正し, さらにPHPのバージョンを5.5にあげて影響を調査・修正することをお薦めします。 # マジッククオートでおきる問題とは若干違う気もしますが (\が消えるあたり)。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

ここで言われているバックスラッシュはasciiのバックスラッシュ(0x5c)でしょうか?だとしてらバックスラッシュで表示されるか円マークで表示されるかはフォント依存です(バイナリとしては完全に同一)。 ∴ 何か勘違いされていませんかねぇ・・・ >\マーク入力はよくあるケースだと思うのですが、スタンダードな方法がありましたら 自前で何か置換するようなことはしません(してはいけません)。格納するときには(一般的には)プレースホルダ(プリペアドステートメント)を使うので、何も意識しなくていいです。 #「\マークがエスケープされてDBに入ってしまいます」ということであれば、 #キチンとプレースホルダを使っていないのでしょう。 なおネイティブなMySQL関数であれば、mysql_real_escape_stringという関数でエスケープします(これ以外のエスケープを使ってはいけません)が、【すでに非推奨】なので今さら覚える必要はありません。PDOなどで書くようにしましょう。 格納は「そのまま」が基本です(エスケープはプレースホルダを使ってシステムに任せます)。気を遣うべきなのは、あとでhtmlの一部として表示するときに(表示する直前で)htmlspecialcharsを通すくらいでしょうか・・・

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.2

いわゆる「HTML特殊文字のエスケープ処理」と言う事になりますが。ぶっちゃっけ格納したデータを、その後どう使うかによります。 ・値 →数値以外を除去し、最終書き出し時に「¥」を付加。 ・文字列 →HTMLとして表示するのなら「¥」或いは「¥」へ変換し格納。 ~以上のように最終的な使い道で、事前にデータを編集修正して保存して置くのが、その後の使い勝手も良くなるので。これは他の特殊文字、例えば ” ’ < > 等の時も同様です。 P.S. PHPカテゴリなので書き出しはHTML準拠で考えますが。何か他の用途として使うために、純粋なテキストに書き出す必要があるのなら。やはり無難に「特殊文字は全て一律に全角へ変換」が一般的な解でしょうか。