2010-12-15 13 views
1

私はhttp://www.example.com?a=1 1&b=2 2&c=3 3のようなURLを持つ配列を持っており、それぞれのURLをURLエンコードする必要があります。URL URLの配列をエンコードする.NET

しかし、私はHttpServerUtility.URLEncode(url)を使用する場合には、出力http%3a%2f%2fwww.example.com%3fa%3d1+1%26b%3d2+2%26c%3d3+3だろうが、私はそれがhttp://www.example.com?a=1+1&b=2+2&c=3+3

のように見える必要があり、これを達成するために、とにかくはありますか?

また、パラメータの値には空白が含まれているだけでなく、&という記号も使用できます。

+0

文字列の半分をエンコードしようとしていますか? – SLaks

+0

UrlEncodeメソッドの出力にはどのような問題がありますか? – Nate

答えて

0

あなたがこれを行うことができます:明らかに

string oldUrl = "http://www.example.com?a=1 1&b=2 2&c=3 3" 
string oldUrlSplit = oldUrl.Split('?'); 
string newUrl = oldUrlSplit[0] + HttpUtility.URLEncode(oldUrlSplit[1]); 

を、あなたがチェックnullにしたい、など

編集:

私はこの1つ上のボールのやや短かったです。 oldUrlSplit [1]を&に分割し、続いて=に分割したい場合は、後の部分(=の後)のみをURLエンコードします。これを指摘してくれた@Anthony Pegramに感謝します。

+1

'.Split( '?')'の何が問題なのですか? – SLaks

+0

@Slaks:まったく何もありません:-)文字配列だけがSplitに渡された時代に戻る必要があります。それに応じて更新する。ありがとう。 –

+0

これは不完全です。 '='もエンコードされ、クエリ文字列を壊すことになります。さらに、 '='で分割することは、値の一部である可能性があるため、無効にすることもできます。 –

0

あなたがしたいことをするためには、すぐに使う方法はありません。プログラム上の観点からは、QueryString内の&は、セットアップできるものではありません。

また、URLをUrlEncodingすると、URLを介して送信されるように設定されているため、/と他の文字を置き換えるのはこのためです。

確かにクエリ文字列をエンコードすることはできますが、意図しない結果が生じる可能性があります。

0

最後のURLがhttp://www.example.com?a=1%201&b=2%202&c=3%203になるように、文字列全体ではなく個々の要素をエンコードする必要があります。

あなたは「3 3」実際にHttpServerUtility.URLEncode()に入力される

ようミッチェルこれを言う「1」「2 2」内のスペースは%20に変換されているが、それだけで、実際の変数だったか見ることができますすぐに使用することはできませんが、UrlEncodingのためにこれらの変数を抽出するためには少し手間がかかるかもしれません。

+0

私は各URLパラメータを解析して値をエンコードする方法を知っていますか? –

+0

あなたは正規表現を使うことができますが、私は確信しているので、確かにより良い方法があると信じていることをお勧めしません。 –

1

皆様からのお返事ありがとうございました。私が使用できる解決策を思いついたのは助かりました。

 Dim sURL As String = "http://www.example.com?a=1 1&b=2 2&c=3 3" 
    Dim sURLParameters = sURL.Split("?") 
    Dim parameters As NameValueCollection 

    parameters = HttpUtility.ParseQueryString(sURLParameters(1)) 

    sURL = sURLParameters(0) & "?" 
    For i As Integer = 0 To parameters.Count - 1 
     sURL += parameters.Keys(i).ToString & "=" & Server.UrlEncode(parameters.Item(i).ToString) 
    Next 

    Response.Write(sURL) 

このリンクは、私をParseQueryStringソリューションに導きます。

.Net C# regex for parsing URL parameters