2016-11-16 2 views
3

は、RFC 3986によれば、パス成分のための有効な文字は、次のとおり URLパス実際に動作するエンコーディングですか?

a-z A-Z 0-9 . - _ ~ ! $ & ' () * + , ; = : @ 

ならびにパーセントエンコードされた文字やもちろん

、スラッシュ /

ただし、上記のルールに従って文字列を適切な形式のパスに変換するクラスは見つかりません。

string rawPath = "/A9_([email protected]*)/# ?/"; 
string expectedPath = "/A9_([email protected]*)/%23%20%3f"; 

しかし、コード下記参照:

string rawPath = "/A9_([email protected]*)/# ?/"; 
Uri.EscapeDataString(rawPath); //Output=>%2FA9_%28%2B%40%2A%29%2F%23%20%3F%2F 
Uri.EscapeUriString(rawPath); //Ouput=>/A9_([email protected]*)/#%20?/ 
HttpUtility.UrlPathEncode(rawPath); //Ouput=>/A9_([email protected]*)/#%20?/ 

何も私は文字をエスケープを解除し、properyは、他のすべての文字をエスケープ許可葉を試していません。

誰かが私自身のユーティリティを書かなくてもいいですね!

+0

フォーマットするのが特定の方法ですか、それともURLが機能しないのですか? –

+0

パスの一部として '#'または '?'を渡す人は誰もあなたがそれをエスケープすると思います。彼らは区切り文字として扱うことを望みます。これにはあらかじめ調理されたメソッドがないことは本当に驚くことではありません。正しければ、渡すことができるかどうかにかかわらず、 '#'や '? 'を文字として含むパスを許可しないことです。 (私は多くのWebサーバーがこのケースを正しく処理するとは思っていませんが、それは別の問題です。) –

答えて

1

これらのそれぞれは、URIの作成におけるさまざまなルールに基づいて予測されるエンコードを提供します。これは、Reserved Characters(RFC 3968のセクション2.2を参照)が含まれており、標準で定義されている区切り文字である?#を含みます。これらは、言語定義の一部であるため、エスケープされません。

+0

私はこの回答に同意するかどうかわかりません。 (RFC 3968のセクション3.3を見てください)。 「未予約/ pct-encoded/sub-delims /」: "/" @ "' '#' '' 'と' space'はそのリストにないので、パーセンテージでエンコードする必要があると期待しています。 –

関連する問題