こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ereg_replaceの文字化けについて

宜しくお願いします。
PHPで文字列の置き換えをする関数の『ereg_replace』についてですが、この関数を使う変数に『'』がはいると、置き換え後にその『'』の前に『\』が付いちゃうんですが、これを回避する方法は無いでしょうか?ちなみに、文字化けするソースを明記させて頂きます。

$title_edit = ereg_replace("/\x0D\x0A|\x0D|\x0A/","<br>","${title}");

入力フォームでtextareaで入力された項目が$titleに入るのですが、textarea内でエンター改行した場合に、その改行コードをHTML上の<BR>タグに置き換えるというものなんですが、これを行うと、『'』の前に『\』が入ってしまうのです。原因が良く判らないで困っています。
お願いします!教えて下さい!!

投稿日時 - 2005-03-28 14:19:45

QNo.1296274

すぐに回答ほしいです

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

こんにちは。
まず、正しく動作していますか?
$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より高速です。

投稿日時 - 2005-03-28 20:50:21

お礼

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

投稿日時 - 2005-03-29 09:18:47

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2005-03-28 21:17:54

お礼

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

投稿日時 - 2005-03-29 09:22:07

あなたにオススメの質問