- ベストアンサー
str_replace()で、なぜ置き換わらないのでしょうか?
下記でエスケープのtestをしていますが、何故か& の置換えが出来ず、「abc & def」としか表示されません。 <?php $memo="abc & def"; $memo=str_replace('&','&',$memo); echo $memo; ?> 幼稚な質問で恐縮ですが、どこが不具合の原因か教えて頂けるとありがたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
HTML出力時のエスケープが目的ならそれで合ってます。エスケープされたソースを、ブラウザが、元の文字に戻して表示します。 ただ、その目的であれば、自分で独自に処理せずに、htmlspecialchars関数を使います。 http://www.php.net/manual/ja/function.htmlspecialchars.php サンプルは、↓ ENT_QUOTES と 文字コード名を省略せず指定してください。 $memo = htmlspecialchars($memo,ENT_QUOTES,"UTF-8");
その他の回答 (2)
- himajin100000
- ベストアンサー率54% (1660/3060)
>それで合ってます。 http://www.w3.org/TR/REC-xml/#sec-references セミコロン… # 本当は「DOMでやれ」って言いたい。すごく言いたい。 # .NETのDOMの実装がーorz
お礼
DOM・・・・ 調べてみたいと思います。貴重なご示唆をありがとうございました。
- kyo999
- ベストアンサー率64% (34/53)
「abc & def」と表示されるのはブラウザ上ですか? ソースだと「 abc & def 」となっていませんか? & は & のHTMLエンティティなのでブラウザ上では「 & 」と表示されます。 ブラウザ上で「 abc & def 」と表示させたいなら以下のように。 $memo=str_replace('&','&amp',$memo);
補足
ご回答ありがとうございます。 >「abc & def」と表示されるのはブラウザ上ですか? はい、そうです。 >ソースだと「 abc & def 」となっていませんか? 表示-ソースで確認したら「 abc & def 」となっていましたが、 ブラウザ上の表示が「&」でも これでフォームから書き込まれた「&」がエスケープできているのでしょうか? 「<」や「>」もエスケープしたいのでtestしているのですが、少し心配です。心配無用? すみません、少し追補をお願いします。
お礼
ありがとうございました。 htmlspecialchars関数のレファレンスも良く読んでみます。