2011-11-03 49 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

相關問題