2015-12-05 73 views
1

我到處尋找,並沒有在iOS中找到明確的答案。我試圖逃避我的URL查詢中的&符號,但是如何在網址查詢中跳過&符號?

stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 

沒有幫助。

作爲一個骯髒的工作的時候,我剛剛被使用

stringByReplacingOccurrencesOfString("&", withString: "and", options: NSStringCompareOptions.LiteralSearch, range: nil) 

雖然這不是最安全的賭注。什麼是正確的方法。

回答

1

您可以用%26替換它。我不清楚爲什麼URLQueryAllowedCharacterSet()沒有抓住它。

0

如果您不需要在10.10或iOS 8之前支持任何內容,則可以使用NSURLQueryItem和NSURLComponents。

如果您需要支持舊版本的OS X或iOS,那麼明確的答案可以在URL Session Programming Guide發現:

CFStringRef encodedString = CFURLCreateStringByAddingPercentEscapes(
    kCFAllocatorDefault, 
    originalString, 
    NULL, 
    CFSTR(":/?#[]@!$&'()*+,;="), 
    kCFStringEncodingUTF8); 

並根據需要適當__bridge和__bridge_transfer鑄件。

與你以前的辦法的問題是,舊的API NSURL設計...好,不要放得細一點就可以了,錯了。這些API假定您想要一次對整個查詢字符串甚至整個URL進行編碼,因此它們只保留與符號和其他類似的保留字符。當然,這通常不是你想要在實踐中真正想做的,但它是原始NSURL API所有表現的方式。

作爲一個補充說明,如果你想堅持的結果爲,例如,一個HTML屬性,你需要使用HTML實體編碼方法做以上,然後進行編碼它第二次。請參閱Question 1105169獲取第二步的幫助。

1

我想下面的代碼應該工作。

NSMutableString * lQueryString = [NSMutableString string]; 
NSMutableCharacterSet * lQueryAllowedCharacterSet = [[NSMutableCharacterSet alloc]init]; 
[lQueryAllowedCharacterSet formUnionWithCharacterSet:[NSCharacterSet URLQueryAllowedCharacterSet]]; 
[lQueryAllowedCharacterSet removeCharactersInString:@"&"]; 

[lQueryString appendString: [@"SampleQueryValue&" stringByAddingPercentEncodingWithAllowedCharacters: lQueryAllowedCharacterSet]]; 
NSLog(@"%@",lQueryString); 

輸出

SampleQueryValue%26 

我不知道是否有更多的字符,這需要從QueryAllowedCharacterSet刪除。

理想的方式是https://stackoverflow.com/a/26539134/2987764