4

我从我的 iPhone 应用程序中调用以下 URL

NSString *resourcePath = [NSString stringWithFormat:@"/sm/search?limit=100&term=%@&types[]=users&types[]=questions", searchTerm];

但是,当进行服务器调用时,我发现发送的实际 URL 是这样的

/sm/search?term=mi&types%5B%5D=questions&limit=100

如何解决这个问题,以便将正确的 URL 发送到服务器?

4

1 回答 1

3

我假设您使用该NSURL方法

initWithScheme:host:path:

创建 URL。根据文档,此方法会自动使用该stringByAddingPercentEscapesUsingEncoding:方法转义路径。

方括号被转义,因为它们在RFC 1738 - Uniform Resource Locators (URL)的意义上是“不安全的” :

由于多种原因,字符可能不安全。[...] 其他字符是不安全的,因为已知网关和其他传输代理有时会修改这些字符。这些字符是“{”、“}”、“|”、“\”、“^”、“~”、“[”、“]”和“`”。

所有不安全的字符必须始终在 URL 中进行编码。

如果您使用

NSString *s = [NSString stringWithFormat:@"http://server.domain.com/sm/search?limit=100&term=%@&types[]=users&types[]=questions", searchTerm];
NSURL *url = [[NSURL alloc] initWithString:s];

然后不添加转义序列,因为initWithString期望字符串包含任何必要的百分比转义码。

于 2012-12-16T13:08:04.077 回答