アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

HTML出力時のエスケープが目的ならそれで合ってます。

エスケープされたソースを、ブラウザが、元の文字に戻して表示します。

ただ、その目的であれば、自分で独自に処理せずに、htmlspecialchars関数を使います。
http://www.php.net/manual/ja/function.htmlspecia …

サンプルは、↓ ENT_QUOTES と 文字コード名を省略せず指定してください。
$memo = htmlspecialchars($memo,ENT_QUOTES,"UTF-8");
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/27 14:06

>それで合ってます。



http://www.w3.org/TR/REC-xml/#sec-references

セミコロン…

# 本当は「DOMでやれ」って言いたい。すごく言いたい。
# .NETのDOMの実装がーorz
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/27 14:08

「abc & def」と表示されるのはブラウザ上ですか?


ソースだと「 abc &amp def 」となっていませんか?
&amp は & のHTMLエンティティなのでブラウザ上では「 & 」と表示されます。

ブラウザ上で「 abc &amp def 」と表示させたいなら以下のように。
$memo=str_replace('&','&amp;amp',$memo);

この回答への補足

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

補足日時:2009/12/26 21:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!