問題:空間にURLパラメータプラス記号「+」「」
現象
URL如ます。http:?//example.****.com/controller/actionのparam =米+ +パンダを調理
場合、Request.QueryString介して後端[「PARAM」]方法「」「+」空間に変換され、プラスの値を値を得るために
二、原因
W3C標準、Content-Typeのあるアプリケーション/ x-www-form-urlencodedで、URLクエリパラメータの名前と値にスペースがそうほとんどすべてのフォームの後に提出された標準的なブラウザを使用して、プラス記号+置換を使用し、 URLクエリパラメータ空間はプラス記号+にコンパイルされます。
別の仕様RFC2396においては、URIを定義し、URI文字は%HH形式(セクション3.4クエリコンポーネント)としてエスケープされるので、スペースを20%としてエンコードされている予約、プラス自体+予約語として特定のアプリケーションのためのRFC 2396標準に従って、%2Bとコンパイルされた、それは+記号を受け付けないことがあり、それは不正な文字であることを、クエリ文字列に表示されます。
そのため、セキュリティ・イニシアチブは、スペース文字をエンコードするために20%を統一URLです。
第三に、アイデアや解決する方法
この状況を解決するために行うための理由で治療を原因を理解します。
ロードマップ:URLの%2Bを置き換えるために+記号
処理されたURLにする必要があります。http://example.****.com/controller/action PARAM =米%2Bcook%2Bpanda?
図1に示すように、送信側アプローチ
このような問題の方法を解決するために、異なるプログラミング言語、ほぼ同じ、究極の目標は、パラメータにプラス記号「+」に置き換え%の2Bであります:
Javaソリューション(推奨)
URLEncoder.encode( "米+クック+パンダ"、 "UTF-8");
C#ソリューション(推奨)
HttpUtility.UrlEncode(" ご飯+料理+パンダ");
Server.UrlEncode(" ご飯+料理+パンダ")
JS溶液(推奨)
encodeURIComponentで( "ご飯+料理+パンダ")
一般的な方法は、愚かな(推奨されません):関数のパラメータで+数がrepace%2Bを交換しました
図2に示すように、受信側アプローチ
送信側は、それは特別な処理の受信側で推奨されていないため、この問題が発生します。
(単一URLの一時的な緊急時のみのパラメータの)特殊なケースでは:治療が終了を受けて、取得したパラメータ内のスペースを強制的には、「(推奨しません+記号に置き換えられ「でReplaceメソッドを」」になり、プラス、これはありますピット)
第四に、延長問題を拡大
/ =のような:質問は主にURLパラメータの特殊記号のある、特別な治療にこのような状況+番号をリードし、他の特殊記号NATURAL同様の状況は、次のような存在します。
したがって、このような問題を解決するために、内部のプログラミング言語処理機能、URLの様々な使用をお勧めします、我々は交換を見つけるための方法をお勧めしませんが、受信側の特別な治療をお勧めしません。