web-dev-qa-db-ja.com

URLエンコードをエスケープする方法は?

URLパラメーターを持つリンクを含むURLパラメーターを作成するリンクを作成しています。問題は私がこのようなリンクを持っているということです

http://mydomain/_layouts/test/MyLinksEdit.aspx?auto=true&source=
    http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193
&url=http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193%26pdfname=5.6%20Upgrade
&title=5.6 Upgrade

このリンクは、これらのパラメータを読み取るブックマーク追加ページに移動します。

autoは、次のパラメータを読み取るかどうかを決定します

sourceは、追加またはキャンセルが完了した後の移動先です

urlはブックマークリンクです

titleはブックマークの名前です

urltitleの値は2つのフィールドに入力されます。次に、ユーザーはsaveまたはcancelをクリックする必要があります。問題は、ブックマークページが値をフィールドに入力すると、それらがデコードされることです。次に、保存しようとしても、pdfname値のurl値にスペースが含まれているため、保存できません。スペースを入れないためにリンクが必要です。ですから、基本的には、フィールドに入力した後も、スペースではなく%20になるようにしたいと思います。

sourceauto、またはtitleには問題はなく、url ..だけです。

これを解決する方法はありますか? %20に使用できる特別なエスケープ文字のように?

注:ブックマークページを変更することはできません。

私はc#/ asp.netを使用してリンクを作成し、そこに移動しています。

ありがとう

13
omega

.NET Framework 4.5以降、WebUtility.UrlEncodeを使用できます。

System.dllにあるため、追加の参照は必要ありません。

Uri.EscapeUriStringとは異なり、URLの文字を適切にエスケープします

Uri.EscapeDataStringとは異なり、文字列の長さに制限がないため、POSTリクエストに使用できます。

 System.Net.WebUtility.UrlEncode(urlText)

別のオプションは

 System.Uri.EscapeDataString() 
23
ericdc

Uri.EscapeDataString()およびUri.UnescapeDataString()は、UrlEncode/UrlDecodeメソッドと比較して安全であり、デコード時にプラス文字をスペースに変換しません。

別のユーザーからの詳細: http://geekswithblogs.net/mikehuguet/archive/2009/08/16/134123.aspx

5
mmosoll

URLを渡す直前にHttpUtiltyのUrlEncodeメソッドを使用するだけです。

 string encoded = HttpUtility.UrlEncode(url);
1
evanmcdonnal