2011-11-03 52 views
3

我发现[NSURL URLWithString:]方法会自动跳过传递给它的url字符串中的一些字符。例如它脱离了括号。但是,URL字符串中包含的其他非法律网址字符<和>导致无为什么[NSURL URLWithString:]会转义url字符串中的某些字符,而不会转换为其他字符?

[[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

你仍在零* myUrl = [NSURL URLWithString:[@“http://foo.bar/?key [] = value [] <>”stringByAddingPercentExcapesUsingEncoding:NSUTF8Encoding]];'? – Sam

回答

4

NSUrlURLWithString:不会逃脱字符串作为由文档指出:

这种方法预计URLString包含任何必需的百分之逃逸 码,它们是“:”,“/”,“%”, '#',';'和'@'。请注意,“%” 逃逸通过UTF-8

但是翻译,你应该能够做到用stringByAddingPercentEscapesUsingEncoding:如下:当你做`NSURL

NSString *myString = @"http://foo.bar/?key[]=value[]<>"; 
NSURL *myUrl = [NSURL URLWithString:[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
+1

使用stringByAddingPercentEscapesUsingEncoding可以让事情变得简单,除非它不能跳过&符。然而,我担心的不是URLWithString返回nil时,我传递未转义的字符串,但该URLWithString ESCAPES括号自动。我认为它不应该转义任何字符=( – minorblend

相关问题