URLがクエリ文字列の値として設定されている場合、URLを何回エンコードする必要があるのか、本当に混乱しています。ブラウザには独自のエンコードプロセスがあることがわかっています。シナリオは次のとおりです。
- 以前のURLを渡したい別の場所にリダイレクトしたい:注:現在のURLは
http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
方法A(なしencodeURIComponent()
):
window.location = 'CostEstimateApproval.aspx?CEMID=40' +
'&ToStatus=1CE'+
'&PrevURL=' + window.location;
これはアドレスバーに表示されます
http://localhost:8081/CostMonitoring/CostEstimateApproval.aspx?CEMID=40&ToStatus=1CE&PrevURL=http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
がないencodeURIComponent()
と、すべてが正常に機能Request.Querystring("PrevURL")
し、受信ページの値は次のようになります。
http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
どちらが正しい。
方法B(with encodeURIComponent()
):
window.location = 'CostEstimateApproval.aspx?CEMID=40' +
'&ToStatus=1CE'+
'&PrevURL=' + encodeURIComponent(window.location);
この方法では、アドレスバーに次のように表示されます。
http://localhost:8081/CostMonitoring/CostEstimateApproval.aspx?CEMID=40&ToStatus=1CE&PrevURL=http%3A%2F%2Flocalhost%3A8081%2FCostMonitoring%2FMainMenu.aspx%3FOption%3DAllCE
Request.Querystring("PrevURL")
受信ページ のの値は
http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
これも正しくデコードされます。
私の質問:
URLを値としてエンコードする必要がありますか?エンコードしてからブラウザで再度エンコードすると冗長になりますか?
または、ブラウザにエンコードさせる必要がありますか?ブラウザに許可した場合、受信ページはURL-as-a-valueの値から実際のURL値に混乱しますか?この例を検討してください。
http://www.domain.com/newpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain.com/oldpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain.com/anypage.aspx
ご覧のとおり、エンコードされていない場合の両方のURL(実際のURLと値としてのURL)は、同じデータ名であるSameName
。受信側はこれをどのように処理しますか?またはHTTPサーバー?
前もって感謝します!