2011-10-27 37 views
29

stringByReplacingPercentEscapesUsingEncoding方法工作不正常,因爲它不解碼不以%字符(即+字符)開頭的特殊符號。有誰知道更好的方法來做到這一點在iOS?如何在iOS中進行URL解碼 - 目標C

這裏就是我目前使用:

NSString *path = [@"path+with+spaces" 
    stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

而這裏的輸出的一個例子:

路徑+與+空格

+3

能否請您發佈您的代碼或在何處以及如何該方法不爲你正常工作的例子嗎? – Carter

+0

只是,謝謝。 – VinnyD

+0

+是一個有效的URL字符。 – titaniumdecoy

回答

51
NSString *path = [[@"path+with+spaces" 
    stringByReplacingOccurrencesOfString:@"+" withString:@" "] 
    stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

注意,加於空間置換在application/x-www-form-urlencoded數據只用 - 一個URL的查詢串的一部分,或一POST請求的主體。

+2

還有其他的字符需要被解碼,否? – VinnyD

+0

編號http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 –

+0

當我試圖解碼字符串@「abcjhjhdfjhafjakhfjaklfj12346890(*^$#@@@#$% ^^ ........「,使用這種方法,它返回nil,它看起來像stringByReplacingPercentEscapesUsingEncoding引起一些問題,因爲」如果轉換不可能返回nil(即百分號轉義給出一個字節序列不合法(來自NSURL.h),所以只是爲那些遇到這個問題的人制作一個像我這樣的類別 –

1

如果你想,以取代加號百分比轉義,執行從「+」到「」(單個空格)的字符串替換。然後使用stringByAddingPercentEscapesUsingEncoding:添加轉義百分比。

加號是從不編碼的許多保留的URL字符之一。

stringByReplacingPercentEscapesUsingEncoding:解碼百分比逃逸)

20
// Decode a percent escape encoded string. 
- (NSString*) decodeFromPercentEscapeString:(NSString *) string { 
return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, 
                 (__bridge CFStringRef) string, 
                 CFSTR(""), 
                 kCFStringEncodingUTF8); 
} 

http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios

這似乎是首選的方法,因爲...... 「顯然,」這是一個「錯誤」蘋果是知道的,但他們沒有這樣做任何事情還沒有.. (http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/

+0

完美!隊友的歡呼聲! – Marcelo

1

SWIFT 2:

extension String { 

    func uriDecodedString() -> String? { 
     return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding 
    } 

} 
相關問題