2016-11-16 27 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?/ 

沒有我試圖讓葉字符轉義和屬性格式轉義所有其它字符。

希望有人能救我從寫我自己的實用工具!

+0

你只是想格式化是一種特定的方式或網址不工作? –

+0

也許沒有人傳入'#'或'?'作爲路徑的一部分,希望你逃避它;他們希望你把它們當作分隔符。對此沒有預先熟練的方法並不令人驚訝 - 理智的做法是不允許包含'#'或'?'的路徑作爲字符,而不管它們是否可以通過。 (我不希望很多Web服務器也能正確處理這種情況,但這是另一個問題。) –

回答

1

這些中的每一個都提供了基於創建URI內的各種規則的預期編碼。這是因爲包含了保留字符(參見RFC 3968第2.2節),其中包括?#,這些是由標準定義的分隔符。這些不會被轉義,因爲它們是語言定義的一部分。

+0

不知道我是否同意這個答案。 (請參閱RFC 3968的第3.3節)。 路徑「段」可以由以下組成: 'unreserved/pct-encoded/sub-delims /「:」/「@」' 由於'''''和'space'不在該列表中,你會期望它需要百分比編碼。 –