我发现[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实例期间究竟发生了什么?它为什么只逃避(也许)只是括号?
答案 0 :(得分:4)
NSUrl
URLWithString:
不会按照文档中的说明转义字符串:
此方法要求URLString包含任何必要的百分比转义 代码,分别是':','/','%','#',';'和'@'。注意 '%' 转义是通过UTF-8
翻译的
但是,您应该可以使用stringByAddingPercentEscapesUsingEncoding:
:
NSString *myString = @"http://foo.bar/?key[]=value[]<>";
NSURL *myUrl = [NSURL URLWithString:[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];