• ベストアンサー

\nが\\nまたは\\\\nとなっていた場合すべて\nに置き換えるには?

DBにデータを保存しようとしているのですがSQL Injection対策の為\を入力すると\\となってしまい改行である\nが無効になってしまいます。 いろいろ調べてるうちにpreg_replaceという関数があるこを知ったのですがどうやって組めばいいのか分かりません。具体的には\nの形で\が2個以上ある場合(\\nや\\\n)はすべて\nに戻すようにしたいと思っております。 どうぞよろしくお願いいたします。 又、別な方法でこれを回避するものがありましたらぜひお教えください。

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

  • ベストアンサー
  • fire--
  • ベストアンサー率49% (146/293)
回答No.1

$replace_after = preg_replace("/\\\\+n/","\n",$replace_before); かな。 今後のために、以下にマニュアルがあります。 http://www.php.net/manual/ja/ また、以下からはwindowsヘルプ版の日本語マニュアルを ダウンロードできます。 http://www.php.net/download-docs.php

Intel_404
質問者

お礼

回答ありがとうございました。 すいません、初心者な者でマニュアルを拝見しPHPの公式サイトも見ましたが、自力では解決できず聞かざるおえない状態でした。 近くPHP辞書(リファレンス)を書店で購入したいと思います。 今後もよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DB2でREPLACEによる文字列の置換

    ODBC経由でPHPからDB2にアクセスしているのですが 電話番号から「-」を除いて比較しようとして 「 SELECT * FROM TABLE WHERE REPLACE(TEL,'-','') = '09012345678' 」 というSQL文を送信しても 「 *LIBLのタイプ*NのREPLACEが見つからない。 」 というエラーメッセージが返されます。 DB2にはREPLACE関数が存在しないのでしょうか? もし存在しないのでしたら文字列を置換する関数は何を使えばよいのか教えて頂けないでしょうか。 よろしくお願いします。

  • mysql_real_escape_stringについて\r\nが付くのは?

    $sql = INSERT INTO users (logid, passwd) VALUES ( "'" . mysql_real_escape_string($_POST['id']) "','" . mysql_real_escape_string($_POST['pas']) . "';" とすると全POSTデータの先頭に「\r\n」が付与されてしまいます。 INSERT INTO users (iogid, passwd) VALUES ('\r\n 入力されたID', '\r\n 入力されたパス') こんな感じになってしまいます。 SQL実行時にデータベースに入ってしまっているのか、 phpMyAdminで確認すると、文章内に改行が入ってしまっているみたいで、表のレイアウトがガタガタになっています。 SQLインジェクション対策に必要だと参考書には表記されているのですが、あまりにデータベースが見にくいので、私の使い方が間違っている様な気がします。 (1)\r\nが先頭に付与されるのは正しいのでしょうか? (2)データベースにSQLで\r\nをINSERTしると、データも\r\nが入ってしまうのでしょうか? (3)PHP + MySQLでSQLインジェクション関数はmysql_real_escape_stringだけなのでしょうか? なにぶん超初心者なので、ご教授の程よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SQLインジェクション対策

    SQLインジェクション対策を考えています。いろいろ検索しましたが漠然とした内容ばかりで参考になりません。具体例、攻撃方法を教えてください。現在は ' のみを排除しています。改行などは有効でしょうか?関数化するつもりですがどういう文字列を対象とすればいいか教えてください。

  • 改行コードについて

    HTMLフォームのテキストエリアで改行した場合の処理についてご質問します。 Windowsのローカル環境で試しています。 改行コードLFでPHPを作成しています。 ○改行コードの認識 LF(\n) Unix,Mac OS X CR(\r) Mac OS 9 CRLF(\r\n) ○テキストエリアからの入力値の処理 CRLF、CRをLFに変換しています。 $value= str_replace ("\r\n", "\n", $value); $value = str_replace ("\r", "\n", $value); このあとDBに値を格納しています。 ○出力の際の処理 DBから値を取得。 phpのprint関数で下記を出力。 <textarea >${value}</textarea> 上記処理で、ローカル、サーバともに正常に動作しています。 しかし改行コードがLF(\n)なのでCRLF(\r\n)のWindowsで表示したときには問題が起きそうな気がします(実際には正常に動作)。 なにかしっくりこなくて質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • テキストエリアからのINSERT文で文中に\nを挿入するには?

    PHPでformの<textarea></textarea>より、POST送信して、 INSERT文でDB(MySQL)に保存した時に、文中改行時に"\n"を挿入したい。 例)textarea内書込み。 あいうえお(ENTERキー:改行) かきくけこ(ENTERキー:改行) さしすせそ    ↓ 現在は、下記のようにINSERT文でDB(MySQL)に保存。 あいうえお かきくけこ さしすせそ    ↓こうしたい あいうえお\nかきくけこ\nさしすせそ 色々調べてみたのですが、 PHPだけで対応できるのかJavaScriptを利用するのか、 正規表現やonKeyDownやonkeypressを使わなければいけないのか、 もっと単純にできるのか等々対処法が全く思い浮かびません。 どなたかアドバイスやご教授をお願いします。 よろしくお願いします。

    • 締切済み
    • PHP
  • タグの中だけ改行を除去したい

    HTMLを解析するプログラムを作成しています。 HTMLタグを正しく認識するために、下記のようにして、HTMLタグの中("<" と ">" に囲まれた範囲)の改行コードを除去するようにしました。 $html = preg_replace ("/[\t\r\n]/"," ",$html); これで一応動作するようになったのですが、HTMLタグでない文章のほうも、改行がすべてなくなってしまうので、HTMLソースが見づらくなってしまいました。 HTMLタグの中だけ置換が有効になるようにしたいのですが、良い方法はありますでしょうか?

    • ベストアンサー
    • PHP
  • おはよう御座います!SJISの改行について!

    お世話になります。 自分のサイトに日記機能を付けたんですけど、改行出来なくて困ってます。 書いた日記を SJIS → EUC-JP に変換を行いDBへ格納しているんですけど、そこで携帯の改行を使っても改行されないまま格納されてしまいます。。。 携帯の改行を\nに変えるみたいな関数ってありますか! 色々見ましたけど分かりやすいのありませんでした。

    • ベストアンサー
    • PHP
  • Replace関数について

    アクセスからエクスポートした改行を含むデータを エクセルの区切り位置で分割しようとctr➕J で試みたのですが、 改行コードの違いによりうまくいきませんでした。 改行を含む列(含まないセルもある)で、replace関数等を使って解決できることでしょうか? アクセス内で修正してからエクスポートしたほうがいいでしょうか? その場合の具体的な方法を教えてください。 よろしくお願いします。

  • SQLの書き方

    電話番号がcsvファイルに000-0000-0000 という形で たくさん入っています。これをアクセスのフォームを使って 読み込んで、オラクルサーバーとつなげ、SQLを発行しています。 DB上には電話番後はtel1 000 tel2 0000 tel3 0000 というように、フィールドが分かれてハイフンなしで入っています。 これを抜くためにはどのようなSQLをかいたらいいのでしょうか? 苦し紛れに書いてみたSQLは select telno1_1||'-'||telno1_2||'-'||telno1_3 as TEL1,* from DB where TEL1 = '" & n1 & "'" というものです。 n1にはcsvから読み込んだ電話番号が000-0000-0000の形で入っています。 どなたか教えてください。 宜しくお願いします。

  • Access がSQLの()括弧を勝手に消す

    Access2010 でクエリをSQLビューで記述し、保存して閉じると 次にSQLビューを開いたときにSQLが変わってます。 改行が消されてたり、()括弧が消されてたり。 改行はまだいいんです。読み難さを我慢するだけなので。 でも()括弧を消した結果、SQL文法エラーになることがあり、 (それも他のDBでは正常に判定されるような、Access独自の構文解釈エラー) そうなるとSQLビューで開けず修正できず、泣く泣くクエリを作り直すハメになります。 ()括弧を勝手に消しておいて、文法エラーだから作り直せ なんて、 Accessは頭悪いとしか思えません。。。 勝手に変更されないようにできませんかね?