電子書籍の厳選無料作品が豊富!

特殊文字はPOSTした際、「"」は「%22」などに内部でURLエンコードされ、受け取り元では元の文字にURLでコードされているはずですが、これに絡んだ動作がいまいち理解しきれないので、お教え願えればと思います。

フォームで、テキストエリアに「"」などを入力してPOSTし確認表示させる際に、HTML出力する際に最終の処理をするCGIへPOSTするために「hidden」属性でPOSTするためのデータを持たせています。
ただ、そのままだと

<input type="hidden" name="xxx" value=""">

となってしまい、POST先では値がなしになってしまうため、HTML出力する際に「"」を「"」に置換して

<input type="hidden" name="xxx" value=""">

としています。
これをPOSTした際、受け取り元でデータを見ると、予想ではそのまま「"」となっているはずでしたが、なぜかちゃんと「"」に戻されています。
ほかの「&」なども同様でした。

これは、正常なのでしょうか?
自分は、POSTされたものは受け取り先でもそのまま「"」だと思っていたので、「"」を元の「"」に置換する処理を入れていたのですが・・・

基本的なことだと思いますが、よろしくお願いいたします。

A 回答 (3件)

質問文内の実体参照(&quot; や &amp;)が元の文字に戻されてしまったようですね。

(これはここのサイトに昔からあるバグです。)

本題ですが、実体参照はブラウザ内では「参照文字そのもの」として扱われますので、&quot; は " として %22 にエスケープされてから送信されます。
この変換は送信メソッド(POST、GET)には関係なく行われます。
    • good
    • 0
この回答へのお礼

あ!勘違いしていたことに今気づきました。
POSTなどで変換するのはサーバ側ではなく、ブラウザ側でしたね(^^ゞ
Dpopさんがおっしゃっていたのはこのことですね・・・
だから、受け取り側ではPOST・GETにかかわらずURLでコードしなければならないと。

これですべてすっきりしました。
ただ、ブラウザによっては変換しないものもあるんでしょうか?

お礼日時:2005/05/16 15:24

> ブラウザによっては変換しないものもあるんでしょうか?



実体参照の変換(例:&quot; → " )は、どのブラウザでも必ず行われます。(これはブラウザがHTMLを受け取った時点で変換されます。)

また、送信時に行われるエスケープ処理( " → %22 )も、ブラウザによらず必ず行われます。
    • good
    • 0
この回答へのお礼

何度も、ご丁寧にありがとうございます。
これで、すべてすっきりしました。
基本的なことを忘れずにこれからもPerlに励みます。

本当にありがとうございました。

お礼日時:2005/05/16 22:25

Web屋です。

OkWebの様なサイトを作る仕事をしています。

うーん。遣りたい事が今ひとつ良く分かりません。

「"」を送りたいのであれば、送る側でURLエンコードをしてから送り、受け取った方でURLデコードを実行しましょう。

「"」を送ると「%22」に自動的に変換される。と書かれていますが、これは全てのサーバーでこの様な動作をする。と言う保障は無い様な気がします。
ついでに、変換されるのはGETの時かと。

> となってしまい、POST先では値がなしになってしまうため、HTML出力する際に「"」を「"」に置換して

1番目の「"」と、2番目の「"」は同じ文字では無いですか?
これでは変換している意味は無いですよね?

この回答への補足

今まで私が使ったサーバは、POSTのときURLエンコードしてくれていたようなので・・・勘違いだったのかもしれませんが。
もちろん、GETの時は自分でURLエンコード・デコードする処理を入れています。

>1番目の「"」と、2番目の「"」は同じ文字では無いですか?

すみません、これは質問を書き間違えてました。
正しくは、

となってしまい、POST先では値がなしになってしまうため、HTML出力する際に「"」を「&quot;」に置換して
<input type="hidden" name="xxx" value="&quot;">
としています。

です(&は半角のアンパサンドです)。
どうやら、質問文でアンパサンドも半角で書いたため、HTML表示のときに「"」になってしまっていました。

この「hidden」属性の値がPOSTされた際、「&quot;」となっていると思ったのですが、「"」となっているのです。

補足日時:2005/05/16 13:57
    • good
    • 0
この回答へのお礼

leaz024さんのご指摘で、勘違いしていることに気づきました。
変換するのは、サーバ側ではなくブラウザ側でした。

ありがとうございました。

お礼日時:2005/05/16 15:26

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