- ベストアンサー
ereg_replaceの文字化けについて
宜しくお願いします。 PHPで文字列の置き換えをする関数の『ereg_replace』についてですが、この関数を使う変数に『'』がはいると、置き換え後にその『'』の前に『\』が付いちゃうんですが、これを回避する方法は無いでしょうか?ちなみに、文字化けするソースを明記させて頂きます。 $title_edit = ereg_replace("/\x0D\x0A|\x0D|\x0A/","<br>","${title}"); 入力フォームでtextareaで入力された項目が$titleに入るのですが、textarea内でエンター改行した場合に、その改行コードをHTML上の<BR>タグに置き換えるというものなんですが、これを行うと、『'』の前に『\』が入ってしまうのです。原因が良く判らないで困っています。 お願いします!教えて下さい!!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 まず、正しく動作していますか? $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); ※一応私の場合は、「'」を全角の「’」や「'」に変更しています。 あと、文字コードでなくて「\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より高速です。
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
php.iniで magic_quotes_gpc が On になっていると、 「'」「"」「(NULL)」に『\』がつきます。 参考URLの「magic_quotes_gpc」の説明の処を読んで下さい。 ここをOffにするか #1で示されているように「stripslashes関数」を使って取り除きます
お礼
ありがとうございます! phpinfo()で調べたらmagic_quotes_gpcがONになっていました。 一つ一つ『\』が出そうな変数をstripslashes関数で\を取り除きます。 ありがとうございましたーm(__)m
お礼
ありがとうございます! 一応、動作はしております。 教えて頂いたとおりやったら、ばっちり取れました! stripslashes($title_edit); が効いた様です! 助かりました-!!ありがとうございますーm(__)m