• ベストアンサー

\の付加について

質問させて頂きます。 とあるフォームでテキストデータを入力し、 それをデータベースに格納しているのですが その際に、不要な位置に「\」マークが追加されてしまいます。 それを省いて格納したいのですが、可能でしょうか? 格納前に↓のように、改行処理的な命令を行ってます。 $text = mysql_escape_string($text); $text = ereg_replace("(\n|\r|\r\n)", "<br>", $text); $text = ereg_replace("\t" , " " , $text); 問題のテキスト文章 「表では」の「表」と「で」の間に「\」が入ります。→「表\では」 「貼られ」の「貼」と「ら」の間に「\」が入ります。→「貼\られ」 他にも「\」が入りましたが 表現を変えて直してみたら、「\」は表示されませんでした。 「表」と「貼」という字は文字化け的な要素が絡んでいるのでしょうか? このような質問で申し訳ありません。

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • gensuke_
  • ベストアンサー率55% (5/9)
回答No.3

一つの解決法は、No.2様が言われているように、EUCを用いる方法です。 もしそれが無理でしたら、php.iniでmagic quotes gpc をOffにします。 その設定もいじれないのでしたら、stripslashes() 関数を利用してバックスラッシュを取り除くことができます。 http://php.s3.to/tt/tt5.php 上記の「書き込み処理」の項目にあります。 http://jp.php.net/manual/ja/function.stripslashes.php stripslashesの説明

gantz77
質問者

お礼

有難う御座いました。参考にさせて頂きます。

その他の回答 (2)

  • Jirorian
  • ベストアンサー率58% (7/12)
回答No.2

EUCを使えば解決できます。 下記HPを参照してください。

参考URL:
http://www.psl.ne.jp/perl/pdojo00c.html
gantz77
質問者

お礼

有難う御座いました。参考にさせて頂きます。

  • ac_2000
  • ベストアンサー率10% (9/87)
回答No.1

> 「表」と「貼」という字は文字化け的な要素が絡んでいるのでしょうか? そうです。 除去する前に、文字コード関連の扱いを勉強しなおし修正したほうが良いと思います。

gantz77
質問者

補足

いえ、文字化けてはいないんです。 単に「表」と「貼」の後ろに「\」が付いてしまうだけなんです。 「\」も試しましたが、効果はありませんでした。

関連するQ&A

  • DBから出力の際preg_replace等が効かぬ

    データベースを使ったウェブサイト。 POSTを使ったformタグより、textareaにてテキストをsql文にて、 MySqlにinsertし、(このときにmysql_real_escape_string) 読み出すときにhtmlspecialcharsしてprint。 これが一般的な流れなのですが、 上記のまま行うと、改行(\r\n)がウェブ上に見えてしまいます。 ですので、 1:print preg_replace("/\r\n/","<br />", htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8')); 2:print nl2br(htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8')); などをやって消そうとしているのですが消えません。 ためしに、 $aaa ="適当な文字"; 1:print preg_replace("/\r\n/","<br />", htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8')); 2:print nl2br(htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8')); のように、MySqlを介さずに直接出力した場合、 ちゃんと改行コードは<br />に変更してくれましたので ソースの記述ミスではないと思うのです。 原因はなににあるでしょうか。 なお、現状phpmyadminで覗くと、 「フィールドA」(mysql_real_escape_stringを通してinsert) ----- あいうえお\r\nかきくけこ ----- 「フィールドB」(mysql_real_escape_stringを通さずにinsert) ----- さしすせそ たちつてと ----- となっているフィールドがありますが、 それらがhtmlで出力されたもののソースを見ると、 ----- A:あいうえお\r\nかきくけこ B:さしすせそ<br />たちつてと となぜかBのほうが希望通りの動きをします。 cを通さずにDBに入れてしまったほうが希望通りに動きます。 さっぱり困りました。

    • ベストアンサー
    • MySQL
  • Shift-JISの文字と改行コードについて

    TEXTAREAで入力した値をDBに対して、 .htmlspecialchars(mysql_real_escape_string(stripslashes($_POST["in3"])),ENT_QUOTES) の記述で保存した時、 文字化けコード(「ソ」「表」)が入っている場合に改行を行うと、 改行部に「\r」が文字として保存されてしまいます。 また、文字化けコードがない場合には「\r」は表示されず、 文字化けコードと改行までの間に半角英数字が入っていると「\r」は表示されません。 このような状態になる理由や回避方法についてコメントいただきたく思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • TEXTAREAに書いた改行コードを正しくBRに

    置き換えたいのですが、<br>がたくさん増えてしまいます。 下記のように書き換えています。 foreach ($data as $key => $value) { $data[$key] = preg_replace("/^(\s| )+$/", "", $data[$key]); $data[$key] = strip_tags($data[$key]); $data[$key] = stripslashes($data[$key]); $data[$key] = mb_convert_kana($data[$key], "KV"); $data[$key] = htmlspecialchars($data[$key]); $data[$key] = str_replace("\r", "<br>", $data[$key]); $data[$key] = str_replace("\n", "<br>", $data[$key]); $data[$key] = mysql_escape_string($data[$key]); } 別途↓も入れましたが、1改行コードにつき2個<br>がつきます。 文字コードはutfです。 $data[$key] = str_replace("\r\n", "<br>\n", $data[$key]); 正しく改行コードを<br>に変換できないでしょうか?

    • ベストアンサー
    • PHP
  • 【php】改行にエスケープ文字が入る

    phpで  $_GET['a'] = stripslashes($_GET['a']); $_GET['a'] = mysql_real_escape_string($_GET['a']); $_GET['a'] → インサート と途中に stripslashes mysql_real_escape_string をはさんでから GETやPOSTを取得してるんですが改行が改行コードに変わってしまいます。 例えば質問フォームとかで  ---------------------------------------- 質問内容 ---------------------------------------- なんたら かんたら  ↓ サブミット ---------------------------------------- 投稿確認 ---------------------------------------- なんたら\n\rかんたら みたいなかんじです。 一旦文字コードをEUCにかえてから mysql_real_escape_stringを挟んだりしたりもしてみてますが 改行が改行コードになってしまいます。

    • ベストアンサー
    • PHP
  • PHP経由でMYSQLに全角文字を格納するにあたって

    かなり初歩的質問かも知れませんが、ご回答頂けれ助かります。m(__)m 現在MYSQLを使用しPHPの現在のデータを格納しようと思いました。 そこで、全角文字の中に'等が入っており、これを mysql_escape_string( または mysql_real_escape_string( を使用し格納しようとしたのですが、全角文字が文字化けしてしまい、 '全角'文字'の様に真ん中の'は文字列として残したいと思ったのですが、 '全角文字の様な形式になってしまい後ろの'がなくなってしまいました。 全角文字の部分は文字化けしていて暴゜・こんな風になってしまいます。 何か解決方法はありませんでしょうか? まだまだ初心者の為、かなり初歩的質問かも知れませんがご回答頂けたら助かります。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • csv内の改行を削除

    フォームから送られてきた文章の 改行を<br />へ変換したいのですが、 $comment_a = ereg_replace("\n","<br />",$comment); としても a<br /> b<br /> c となってしまいます。 a<br />b<br />c としたいのですが、どうしたらよいのでしょうか。 $comment_b = str_replace("\n", "", $comment_a); を追記したのですが、うまくいきませんでした。

    • ベストアンサー
    • PHP
  • 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
  • mysql_real_escape_stringについて

    PHPとMYSQLで連携させ組んでおります。文字コードはutf-8で改行コードはLFです。 ざっくりですが流れとしてはフォームからユーザーが入力した値を mysql_real_escape_stringしデータ登録しているのですが改行文字に問題があります。 ※改行文字は\r\nでも\rでも最終的に\nになるように統一しております。 それを踏まえて単純に登録する値を静的に以下のように作成します。 $val1 = mysql_real_escape_string("あああ\nいいい''ううう"); $val2 = "あああ\nいいい''ううう"; phpmyadminからテーブルを開きエクスポートしSQLを確認すると $val1は(1, 'あああ\\nい\\''\\''いい')となり $val2は(2, 'あああ\nい''''いい')となっています。 これは当然の動きかとは思うのですが改行文字\nが\\nになるのを防げないものかと 悩んでいるのですがこれは無理でしょうか? mysql_real_escape_stringしない場合エスケープもされないのでそのままの状態なのですが データを登録する場合やselect文でWHERE句を用いる場合セキュリティ的に外すことも できないもの(かと思い込んでいる)でどうしていいかわからない状態です。 知識もあいまいなもので無理なものだとわかればすぐにでも諦めがつくのですが なにかいい方法があるのでは・・・と淡い期待を持っており質問させて頂きました。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 改行について

    フォームのテキストエリアに入力されたデータを PHPと連動してmySqlに格納したいと思っています。 テキストエリアから渡された文字列中に改行がある場合、 そのまま格納しても(サニタイズは当然するとして)問題ないでしょうか? それとも<BR>等に変換すべきでしょうか?

    • ベストアンサー
    • MySQL
  • ereg_replaceの文字化けについて

    宜しくお願いします。 PHPで文字列の置き換えをする関数の『ereg_replace』についてですが、この関数を使う変数に『'』がはいると、置き換え後にその『'』の前に『\』が付いちゃうんですが、これを回避する方法は無いでしょうか?ちなみに、文字化けするソースを明記させて頂きます。 $title_edit = ereg_replace("/\x0D\x0A|\x0D|\x0A/","<br>","${title}"); 入力フォームでtextareaで入力された項目が$titleに入るのですが、textarea内でエンター改行した場合に、その改行コードをHTML上の<BR>タグに置き換えるというものなんですが、これを行うと、『'』の前に『\』が入ってしまうのです。原因が良く判らないで困っています。 お願いします!教えて下さい!!

    • ベストアンサー
    • PHP