为什么[NSURL URLWithString:]会转义url字符串中的某些字符而不会转义其他字符?

时间:2011-11-03 14:12:49

标签: iphone ios nsurl

我发现[NSURL URLWithString:]方法会自动转义传递给它的url字符串中的某些字符。例如它逃脱了括号。但url字符串包含其他非法律网址字符,例如<和>导致方法返回nil

[[NSURL URLWithString:@"http://foo.bar/?key[]=value[]"] absoluteString]

使用

返回相同的结果
[@"http://foo.bar/?key[]=value[]" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

而,

[NSURL URLWithString:@"http://foo.bar/?key[]=value[]<>"] returns nil, not a url with an escaped string.

在启动NSURL实例期间究竟发生了什么?它为什么只逃避(也许)只是括号?

1 个答案:

答案 0 :(得分:4)

NSUrl URLWithString:不会按照文档中的说明转义字符串:

  

此方法要求URLString包含任何必要的百分比转义   代码,分别是':','/','%','#',';'和'@'。注意 '%'   转义是通过UTF-8

翻译的

但是,您应该可以使用stringByAddingPercentEscapesUsingEncoding:

执行以下操作
NSString *myString = @"http://foo.bar/?key[]=value[]<>";
NSURL *myUrl = [NSURL URLWithString:[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];