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

PHPのhtmlspecialcharsについての質問です。
とあるフォームで、「情報登録フォーム」→「確認ページ」→「完了ページ」という構成でプログラムを組んでいます。
タグはエスケープした状態でDBに保存しようと思ってます。
&lt;b&gt;カズン&lt;/b&gt;のようにエスケープした文字列をPOST送信したらもとの<b>カズン</b>に戻るという現象に見舞われてます。

まず「情報登録フォーム」で下記のように値をおくります。
<input type="text" name="shop" value="<b>カズン</b>" />
「情報登録フォーム」でタグが入ってもてもエスケープできるように、「確認ページ」の出力時にhtmlspecialcharsを使っています。
結果、下記のようになります。
<input type="hidden" name="shop" value="&lt;b&gt;カズン&lt;/b&gt;" />

次にこの値を「完了ページ」にPOSTで送ろうとしたら元の<b>カズン</b>にかわってしまいます。
「完了ページ」で再度htmlspecialcharsをかけたら&lt;b&gt;カズン&lt;/b&gt;になるんですが。
私は&lt;b&gt;カズン&lt;/b&gt;は普通にPOSTすれば&lt;b&gt;カズン&lt;/b&gt;が送られてくると仮定してたのですが、これは正しい仕様なのでしょうか?

A 回答 (4件)

$_POST['shop']は「<b>カズン</b>」となります。


正しい実装の全てのブラウザで、このようになります。
(私は、そうならないブラウザを見たことがありません)。
エスケープしてDBに保存したい場合は、SQL文を組立てる際に、
htmlspecialchars、mysql_real_escape_string(mysqlの場合)を
しなければなりません。
#一般的に、DBには「<b>カズン</b>」を入れておき、
#HTML出力する際に、htmlspecialcharsでエスケープする方式と
#することが多いと思います。
    • good
    • 0

連投失礼します。


InternetExplorer も <b>カズン</b> でPOSTされますよね・・。

&lt;b&gt;カズン&lt;/b&gt; というデータを &lt;b&gt;カズン&lt;/b&gt; のまま送信するのは InternetExplorer は <textarea></textarea> 内のデータでした。

すみません。
    • good
    • 0

以前私も同じようなことを試していましたが、CGI側にPOSTされるデータはブラウザによって異なるようです。



おそらく value="&lt;b&gt;カズン&lt;/b&gt;" でPOSTされたデータが <b>カズン</b> になってしまうのは Firefox ではないでしょうか?
InternetExplorer の場合は &lt;b&gt;カズン&lt;/b&gt; がそのままPOSTされてきます。

よってブラウザによりますが正しい仕様だと思います。
    • good
    • 0

一度html上で評価されてしまっているのでそうなっているのでしょう。


もしやるなら

<input type="hidden" name="shop" value="&amp;lt;b&amp;gt;カズン&amp;lt;/b&amp;gt;" />
という感じでしょうか。
    • good
    • 0

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