• ベストアンサー

str_replace()で、なぜ置き換わらないのでしょうか?

下記でエスケープのtestをしていますが、何故か& の置換えが出来ず、「abc & def」としか表示されません。 <?php $memo="abc & def"; $memo=str_replace('&','&amp',$memo); echo $memo; ?> 幼稚な質問で恐縮ですが、どこが不具合の原因か教えて頂けるとありがたいです。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.2

HTML出力時のエスケープが目的ならそれで合ってます。エスケープされたソースを、ブラウザが、元の文字に戻して表示します。 ただ、その目的であれば、自分で独自に処理せずに、htmlspecialchars関数を使います。 http://www.php.net/manual/ja/function.htmlspecialchars.php サンプルは、↓ ENT_QUOTES と 文字コード名を省略せず指定してください。 $memo = htmlspecialchars($memo,ENT_QUOTES,"UTF-8");

spindle
質問者

お礼

ありがとうございました。 htmlspecialchars関数のレファレンスも良く読んでみます。

その他の回答 (2)

回答No.3

>それで合ってます。 http://www.w3.org/TR/REC-xml/#sec-references セミコロン… # 本当は「DOMでやれ」って言いたい。すごく言いたい。 # .NETのDOMの実装がーorz

spindle
質問者

お礼

DOM・・・・ 調べてみたいと思います。貴重なご示唆をありがとうございました。

  • kyo999
  • ベストアンサー率64% (34/53)
回答No.1

「abc & def」と表示されるのはブラウザ上ですか? ソースだと「 abc &amp def 」となっていませんか? &amp は & のHTMLエンティティなのでブラウザ上では「 & 」と表示されます。 ブラウザ上で「 abc &amp def 」と表示させたいなら以下のように。 $memo=str_replace('&','&amp;amp',$memo);

spindle
質問者

補足

ご回答ありがとうございます。 >「abc & def」と表示されるのはブラウザ上ですか? はい、そうです。 >ソースだと「 abc &amp def 」となっていませんか? 表示-ソースで確認したら「 abc &amp def 」となっていましたが、 ブラウザ上の表示が「&」でも これでフォームから書き込まれた「&」がエスケープできているのでしょうか?  「<」や「>」もエスケープしたいのでtestしているのですが、少し心配です。心配無用? すみません、少し追補をお願いします。

関連するQ&A