• ベストアンサー

ereg_replaceの文字化けについて

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

  • nikuq
  • お礼率75% (477/631)
  • PHP
  • 回答数2
  • ありがとう数6

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

  • ベストアンサー
回答No.1

こんにちは。 まず、正しく動作していますか? $title_edit = ereg_replace("/\x0D\x0A|\x0D|\x0A/","<br>","${title}"); の部分ですが、 $title_edit = ereg_replace("\x0D\x0A|\x0D|\x0A","<br>","${title}"); になると思いますよ。 ちなみに、私の環境では正常に動作しました。文字コードを色々変えてみても正常でした。 以下のようにやってみてください。 //改行をタグへ $title_edit = ereg_replace("\x0D\x0A|\x0D|\x0A","<br>","${title}"); //不要な「\」を除去 $title_edit = stripslashes($title_edit); ※一応私の場合は、「'」を全角の「’」や「&#039」に変更しています。 あと、文字コードでなくて「\r\n」や「\n」で動作しますよ。 $title_edit = ereg_replace("\r|\r\n|\n","<br>","${title}"); 以下の感じでも試してみてください。 $title_edit = str_replace("\n", '<BR>', ${title}); ご質問のような感じでやるなら $title_edit = preg_replace("/\x0D\x0A|\x0D|\x0A/","<br>","${title}"); ereg_replaceより高速です。

nikuq
質問者

お礼

ありがとうございます! 一応、動作はしております。 教えて頂いたとおりやったら、ばっちり取れました! stripslashes($title_edit); が効いた様です! 助かりました-!!ありがとうございますーm(__)m

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

php.iniで magic_quotes_gpc が On になっていると、 「'」「"」「(NULL)」に『\』がつきます。 参考URLの「magic_quotes_gpc」の説明の処を読んで下さい。 ここをOffにするか #1で示されているように「stripslashes関数」を使って取り除きます

参考URL:
http://jp2.php.net/manual/ja/ref.info.php#ini.magic-quotes-gpc,http://jp2.php.net/manual/ja/function.stripslashes.php
nikuq
質問者

お礼

ありがとうございます! phpinfo()で調べたらmagic_quotes_gpcがONになっていました。 一つ一つ『\』が出そうな変数をstripslashes関数で\を取り除きます。 ありがとうございましたーm(__)m

関連するQ&A

  • mb_ereg_replaceについて

    マルチバイトでの置き換えについて質問です。現在は以下のように str_replaceで置き換えしており文字化けはないのですがマルチバイト 対応のmb_ereg_replaceで実行したほうがいい事を知りました。 以下現在のソースです。 // 検索文配列 $search = array("{#aaa#}", "{#bbb#}", "{#ccc#}"); // 置き換え文配列 $replace = array("あああ", "いいい", "ううう"); // 置き換え $str = str_replace($search, $replace, $str); 単純にstr_replaceをmb_ereg_replaceにしてみたのですがエラーに なってしまいました。 置き換えしたい文字が複数あるのでできれば検索文字、置き換え文字を 配列として使用したいのですがどうすればいいのでしょうか? ちなみにですが文字コードはutf-8です。

    • ベストアンサー
    • PHP
  • 配列をmb_ereg_replaceで一気に置き換えるには?

    お世話になります。 mb_ereg_replace関数を使い文字の置き換えを行っているのですが、置き換 えるものが多く、1回で置き換えられないかと思い、質問をさせて頂き ます。 // 検索文配列 $search = array("__tome__", "__hame__", "__hoge__"); // 置き換え文配列 $replace = array("$tome", "$hame", "$__hoge__"); // 置き換え $str = mb_ereg_replace($search, $replace, $str1); とやると Warning: mb_ereg_replace() expects parameter 2 to be string, array given in on line というエラーが出てしまい、うまく置き換える事が出来ません。どのようにすればうまく置き換えられるでしょうか? ご教授のほどよろしくお願いします。

    • ベストアンサー
    • PHP
  • preg_replace ereg_replace

    いつもお世話になっております。 データを抽出する前にサニタイズが必要となり、 実行する処理で、 $rep = "/\\\/"; $arr = array('data1' => 'A', 'data2' => '\\\\\\'); $ret = preg_replace($rep , "\\\\\\" ,$arr ); $ret = ereg_replace("'", "\'" ,$ret); preg_replaceは配列で戻ってくる事は知っているのですが、 ereg_replaceは配列で戻ってくるのでしょうか。 お手数ですが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • mysqlの関数でereg_replace

    レコードから、特定のドメインを含むURLを消去する、といった動作をmysqlの関数で実現しようと考えてます。phpで言うところのereg_replace()のような関数がmysqlであるかどうかということです。 以下のように"bbs"というテーブルの"com"というフィールドからURLに値する文字列を消去するSQL分を実行しましたがこれは動作しませんでした。 update bbs set com = replace(com,regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)','') where com regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'; replace関数の第二引数にregexpを使用することができませんでした。(やり方が間違ってるのでしょうか?) phpのereg_replaceを使用してフィールド"com"に含まれるURLを消去していくというやり方で実現は可能なのですが、動作の軽さやソースのシンプルさを考え、SQL文で実現することを考えてます。 mysqlのヴァージョンは3.23.58です。 よろしくお願いいたします。m(__)m

  • PHP[ereg_replace]1文字の置き換え

    現在「abcdefga1u2r3」などランダムな文字列の中から aをcにcをaにbをvにといった文字列の置き換えを検討しています。 結果:「cvadefgc1u2r3」となってほしいのですが 下記のコードですと 「avadefga1u2r3」と置き換えた文字を さらに置き換えてしまいます。 結果と同様に同時に置き換えて完結できるプログラムは どのように書けばよろしいのでしょうか。 ================= $rcd = "abcdefga1u2r3"; for($i=0;$i<sizeof($rcd);$i++){ $rcd[$i] = ereg_replace("a", "c", $rcd[$i]); $rcd[$i] = ereg_replace("c", "a", $rcd[$i]); $rcd[$i] = ereg_replace("b", "v", $rcd[$i]); $result[$i]=$rcd[$i]; $i=$i+1; } $fp = fopen("text.txt","w"); foreach($result as $newdata){ fwrite($fp, $newdata); } fclose($fp);

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

    ereg_replaceで文字を入れ換えしようとしております。 その際、 <A HREF="http://www.xxx.co.jp/xxx/xxx.cfm?pd=13850" target="_blank">xxx</A> という文字列の頭のタグ開始部分を取ろうと思ってるのですが、URLに?が入ってるものが入れ換えができません。 解決方法など、お分かりになる方おられましたら、ご教授のほうよろしくお願いします。

    • 締切済み
    • PHP
  • PHP5.3以降のereg_replaceについて

    PHP5.3以降にアップデートしたところ、ereg_replaceで書かれている箇所で警告が出るようになりました。 マニュアルを見た限りではpreg_replaceへの移行が推奨されているようなので、preg_replaceに書き換えようと思い、http://melma.com/backnumber_129036_1571788/を参考に、2つ目のパラメータの前後に/を付けましたが、画面に何も表示されず、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、ソースは下記となります。 また、記述はhttp://okwave.jp/qa/q849820.html?&status=true&errcode=&msg=&qid=849820を使用させていただいており、やりたいことはURLに自動的にハイパーリンクを付加したいという状況で、ereg_replaceを使用すればできております。 <?php $proto = "私のブログはhttp://www.hoge.com/です。"; $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$proto); //$proto = preg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","/<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>/",$proto); print $proto; ?> 以上、宜しくお願いします。

    • ベストアンサー
    • PHP
  • preg_replace, ereg_replace

    $bodyにはテキストファイルなどから読み込んだ、$dateと言う文字(変数ではない)と、改行を含む文字列。 それで、「$date」を、phpスクリプト上の$dateの値に置換したく、 $tmp = preg_replace("/\$date/s", $date, $body); または、 $tmp = ereg_replace("\$date",$date,$body); としたのですが、どうも置換されません。何がいけないのでしょうか?

    • ベストアンサー
    • PHP
  • mb_ereg_replaceに関して

    こんにちは。お世話になっております。 開発時(PHP5.1.4)では何ら問題なかったものが、レンタルサーバー上(PHP5.0.4)へアップロードしたら、mb_ereg_replace関数の部分でエラーが出て対処に困っております。 エラー文 Call to undefined function mb_ereg_replace() $key = $_GET['key']; $key = addslashes($key); $key = mb_convert_encoding($key, 'EUC-JP', 'auto'); $key = mb_ereg_replace(" ", " ", $key);//ココでエラー $arr = explode(" ",$key); 上記は実際のソースの一部ですが、GETで渡された文字列(検索キーワード、key=○○)をDB(MySQL)に登録のあるデータを検索する。といった結果を願い設置しております。 借りたサーバ(共有)は、(適切な言葉じゃないかも知れませんが)PHPはCGIのもと動かしているようですが、これも原因の一つなのでしょうか? お忙しいなか恐縮ですが、ご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • ereg_replace関数に関して

    教えて下さい。 プログラム上でereg_replace関数を多数使用しています。 この関数は、PHP 5.3.0以上では使えない事がわかり、他の関数に切り替えたいと考えて いますが、書き方がわかりません。 以下の記述をPHP 5.3.0以上で動作させる為には、どのように記述すれば良いでしょうか? 《現在の記述》 $dest=ereg_replace('^', '&gt;' ,$dest); $dest=ereg_replace("\n", "\n>" ,$dest); $dest = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $src); 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう