![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
特殊文字は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されたものは受け取り先でもそのまま「"」だと思っていたので、「"」を元の「"」に置換する処理を入れていたのですが・・・
基本的なことだと思いますが、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
質問文内の実体参照(" や &)が元の文字に戻されてしまったようですね。
(これはここのサイトに昔からあるバグです。)本題ですが、実体参照はブラウザ内では「参照文字そのもの」として扱われますので、" は " として %22 にエスケープされてから送信されます。
この変換は送信メソッド(POST、GET)には関係なく行われます。
あ!勘違いしていたことに今気づきました。
POSTなどで変換するのはサーバ側ではなく、ブラウザ側でしたね(^^ゞ
Dpopさんがおっしゃっていたのはこのことですね・・・
だから、受け取り側ではPOST・GETにかかわらずURLでコードしなければならないと。
これですべてすっきりしました。
ただ、ブラウザによっては変換しないものもあるんでしょうか?
No.3
- 回答日時:
> ブラウザによっては変換しないものもあるんでしょうか?
実体参照の変換(例:" → " )は、どのブラウザでも必ず行われます。(これはブラウザがHTMLを受け取った時点で変換されます。)
また、送信時に行われるエスケープ処理( " → %22 )も、ブラウザによらず必ず行われます。
何度も、ご丁寧にありがとうございます。
これで、すべてすっきりしました。
基本的なことを忘れずにこれからもPerlに励みます。
本当にありがとうございました。
No.1
- 回答日時:
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;」となっていると思ったのですが、「"」となっているのです。
leaz024さんのご指摘で、勘違いしていることに気づきました。
変換するのは、サーバ側ではなくブラウザ側でした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
InputMan の imTextについて
-
ダブルクォート文字などをフォ...
-
perlで受取ったパラメータをバ...
-
「数値文字参照への変換するソ...
-
テキストエリアに半角「\\」ま...
-
CSVファイルの中で、「 , 」カ...
-
住宅にカナを入力する際に丁目...
-
英数字のみ全角から半角に変換
-
CSVの定義
-
マクロを使ってフォルダー内に...
-
EXCELからCSVにすると余計なカ...
-
csvデータ ダブルクォーテ...
-
エクセルで数値を全角文字(カ...
-
文字コードの%E3%80%とは何です...
-
Malformed UTF-8 character
-
PHP カンマをエスケープしたい...
-
VBA 置換文字がみつからない時
-
全角スペースを削除するには?
-
大文字と全角文字は同じ意味で...
-
COBOLでの全角文字の判定をした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字実体参照が勝手に変換され...
-
正規表現でカンマを対象にする方法
-
InputMan の imTextについて
-
大文字、小文字のコードの打ち方
-
チェックボックスの複数選択の...
-
「数値文字参照への変換するソ...
-
文字化けを元に戻せますか?
-
機種依存文字の文字コード変換
-
ダブルクォート文字などをフォ...
-
unicodeの表示
-
特殊文字をPOSTした際の動作は?
-
Jcode.pmでの半角カナ→全角カナ...
-
Jcode を使った複数選択値の文...
-
テキストファイルの大文字を小...
-
PerlでUTF8をEUCに変換
-
半角カナを検出したい
-
戻り値の意味がわかりません…
-
jcodeを使ったgetcode
-
jcode.plについて
-
半角カナから全角カナへ
おすすめ情報