0

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 

これも正しくデコードされます。

私の質問:

  1. URLを値としてエンコードする必要がありますか?エンコードしてからブラウザで再度エンコードすると冗長になりますか?

  2. または、ブラウザにエンコードさせる必要がありますか?ブラウザに許可した場合、受信ページは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サーバー?

前もって感謝します!

4

1 に答える 1

2

encodeURIComponentURL パラメーターをエンコードしているため、(1 回)を使用する必要があります。

質問の最後で指摘したように、たとえば、encodeURIComponentURL に が含まれている場合、URLのエンコードに失敗すると問題が発生します。&

メソッド A のみが機能したことに注意してください。これは、例prevUrlがやや単純に形成されているためです。たとえば、2 番目の url パラメータが含まれていません。

于 2011-07-30T02:29:42.040 に答える