2016-11-16 97 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'不在该列表中,你会期望它需要百分比编码。 –