• 締切済み

htmlspecialcharsの挙動について

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;が送られてくると仮定してたのですが、これは正しい仕様なのでしょうか?

みんなの回答

回答No.4

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

  • oathos
  • ベストアンサー率0% (0/0)
回答No.3

連投失礼します。 InternetExplorer も <b>カズン</b> でPOSTされますよね・・。 &lt;b&gt;カズン&lt;/b&gt; というデータを &lt;b&gt;カズン&lt;/b&gt; のまま送信するのは InternetExplorer は <textarea></textarea> 内のデータでした。 すみません。

  • oathos
  • ベストアンサー率0% (0/0)
回答No.2

以前私も同じようなことを試していましたが、CGI側にPOSTされるデータはブラウザによって異なるようです。 おそらく value="&lt;b&gt;カズン&lt;/b&gt;" でPOSTされたデータが <b>カズン</b> になってしまうのは Firefox ではないでしょうか? InternetExplorer の場合は &lt;b&gt;カズン&lt;/b&gt; がそのままPOSTされてきます。 よってブラウザによりますが正しい仕様だと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

一度html上で評価されてしまっているのでそうなっているのでしょう。 もしやるなら <input type="hidden" name="shop" value="&amp;lt;b&amp;gt;カズン&amp;lt;/b&amp;gt;" /> という感じでしょうか。

関連するQ&A

専門家に質問してみよう