人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlに関する質問です。
perlにおけるhttpリクエスト時のエンコードとデコードにおける下記の問題について、教えてください。

*問題点
コメント欄のコードでデコード処理をしています。
このままだと、ブラウザ側で'+'の文字列を含めたリクエストを送ると、サーバー側でリクエストを処理する際に、'+'が半角スペースに置換されてしまいます。(期待している挙動:'+'は別の文字コードにエンコードされ、 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;の処理でデコードされる)

$value =~ tr/+/ /;の処理をコメントアウトすると、'+'が半角スペースに置換される問題が解消されます。また、半角スペースのデコードがされないはずなのに、半角スペースが正常に処理され、全く問題がないように見えます。
これは、下記の私の認識と食い違います。どなたかご存知の方がいらっしゃいましたら、解説をお願い致します。

*現状の私の認識
urlにリクエストを投げるときの半角スペースは+にエンコードされるため、
サーバー側(perl側)で+を半角スペースにデコードしなければならない。

よろしくお願い致します。


●質問者: ぷりっぷりのおしり
●カテゴリ:インターネット ウェブ制作
✍キーワード:FA HTTP Perl URL たか
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● kidd-number5
●68ポイント ベストアンサー

"+" の文字列を送信しているのに、それがスペースを送信していると解釈されているという意味でしょうか?

だとしたら、 + は %2Bとして送るべきです。

この辺でしょうか。

http://d.hatena.ne.jp/koyuking248/20101129/1291034025

あと、URI::escapeというモジュールもありますね。

http://search.cpan.org/dist/URI/URI/Escape.pm

◎質問者からの返答

回答ありがとうございます。

>"+" の文字列を送信しているのに、それがスペースを送信していると解釈されているという意味でしょうか?

質問がわかりにくくてすみません。

問題は2つあります。

1つ目の問題は、通常なら、"+"は%2Bにエンコードされて、%2Bをデコードして"+"に戻るはずなのに、現状では、"+"が%2Bにエンコードされずに+のまま送信され、半角スペースにデコードされてしまっていることです。

もう一つの問題は、半角スペースが"+"以外の何かにエンコードされ(未確認)、正常にデコードが実行されている理由がわからないということです。

デコードというよりはエンコードの問題な気がしてきました。


2 ● kidd-number5
●66ポイント

なるほど。どのようにして送信しているかわからないので、

そちらのやり方についてご提示いただければ何かわかるかもしれませんね。

現時点ではブラウザ(Chromeで試しています)に直接 "+ +" を入れるとたしかに

%2B+%2Bとエンコードされていますね。。

◎質問者からの返答

回答ありがとうございます。

エンコードしているとおぼしき箇所を抜き出してきました。

入力口すべてについて、@DTW_rQHTMLENCODE()が書いてあり、おそらくこれでエンコードがされています。

現在ググってますが、文献が少なそうです。


3 ● kidd-number5
●66ポイント

なるほど。IBMのなんか、(DB2Server?/Net.data?)くらいしか情報がなかったですね。

実際そこが回避できないのだとしたら、デコードを二重で実施するしか手がなさそうですね。

あまりお役に立てずスミマセン。

◎質問者からの返答

回答ありがとうございます。

DTW_rQHTMLENCODEに対応したデコードを確認してみます。

kidd-number5さんに質問している中で情報が整理されていったので助かりました。

また質問を見かけた際は、ぜひご回答よろしくお願い致します。


4 ● 亜意鵜獲御
●0ポイント

わからない


5 ● 亜意鵜獲御
●0ポイント

わからん

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ