プロが教えるわが家の防犯対策術!

簡単な問合せフォームを作成中に文字実体参照に変換した文字が、元に戻されてしまい困っています。簡単なサンプルを作成してみましたが、以下の様な状態です。
1.入力フォームを持ったHTMLに
「<>と&lt;と&gt;」
と入力し、xxx.cgiに渡します。
2.xxx.cgi内で入力文字列を取得し、文字実体参照に変換後<hidden>で値を保持、再度xxx.cgiに<hidden>の文字列を渡すようにします。この時点で入力値は
「&lt;&gt;と&amp;lt;と&amp;gt;」
となります。
3.再度xxx.cgiが呼ばれると、文字実体参照に変換する処理が行われる為、入力値が
「&amp;lt;&amp;gt;と&amp;amp;lt;と&amp;amp;gt;」
となるはずですが、
「&lt;&gt;と&amp;lt;と&amp;gt;」
となってしまいます(変換処理が行われているはずなのに変換されていない)不思議に思って変換前のCGIの引数を確認してみると、
「<>と&lt;と&gt;」
と文字実体参照が元に戻されてしまっています。
ちなみに文字実体参照の変換処理は$valueに対象の文字が入っているとして以下の方法で変換しています。
----------
$value =~ s/&/&amp;/g;
$value =~ s/"/&quot;/g;
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\n/<BR>/g;
----------
こういった現象についてでも何か分かるようでしたら宜しくお願いします。

A 回答 (2件)

どうやら&lt;などをHiddenで渡しても渡すときに元の<にもどってしまうようです。


(HIddenではなくtextとして表示させて送るのと同じ。見えているか見えていないかの違い)

↑経験則なので仕様なのかどうかは知りません。
    • good
    • 0
この回答へのお礼

moon_nightさん、ご回答ありがとうございます。
私だけでなく他の方も同様の現象が発生していたのですね。
ただ疑問なのが、HTMLからCGIに「<>と&lt;と&gt;」を渡す時はそのまま渡るのに、CGIからCGIに渡す時は元に戻ると言った部分が気になります。

お礼日時:2007/04/07 19:38

ブラウザは以下のような動きをします。



・テキストボックスなどに <> と手入力した場合
 ⇒ブラウザはそのまま <> と解釈して、メモリに格納。

・HTMLのvalueに &lt;&gt; と入れた場合
 ⇒ブラウザはHTMLをParseする際に、<>に変換します。
  そして、変換後の <> をメモリに格納します。

valueなどに <> を入れたい場合、HTML上では &lt;&gt; と書くのがルールです。ブラウザがそのHTMLを解釈するときに &lt;&gt; を <> に変換するのもルールです。

もしブラウザがそのような変換をしないならば、テキストボックスなどの初期値に、" を与えることができなくなります。

<input type="text" name="x" value="&quot;">

とした場合に、ブラウザが &quot; を " に変換してくれるから、初期値として " が入るわけです。

基本的に、全てのブラウザは上記のような振る舞いをすると思ってください(厳密に言うと、極一部の例外はあります)。
    • good
    • 0

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