2010-01-29 15 views
10

哪個NSString的編碼方法將百分比(&)字符正確地躲避符號爲%26NSString的方法來逃避百分之「&」的URL

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 

獲取空格(%20)和其他壞人,但忽略&符!

+0

與號是在URL中有效的字符。 'www.example.com?1 = 5&B = 7' – 2010-01-29 01:39:30

+1

我know..but它搞亂了我的查詢參數,以便需要押韻增加查詢字符串之前,「刪除」的和值中出現的.. – Meltemi 2010-01-29 02:00:21

回答

43

&符號不會通過該方法,因爲他們是在一個URL合法字符進行處理。在這次電話會議之前,你應該預先處理特別有問題的作品,零碎。

+66

+1。 – 2010-01-29 01:40:47

23

這裏是一個很好的解決方案,從Bagonca blog到URL編碼您的NSString的考慮這個問題:

+ (NSString *)urlEncodeValue:(NSString *)str 
{ 
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8); 
    return [result autorelease]; 
} 

添加CFBridgingRelease(爲ARC兼容。

+ (NSString *)urlEncodeValue:(NSString *)str 
{ 
    NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8)); 
    return result; 
} 
+0

這解決了我的問題。答案很難找到,因爲我不知道原因是我的POST正文中的字符。這好像是由於我的文件的大小。如果您正在發送sendAsynchronousRequest並請求終止有效載荷,檢查編碼。謝謝。 – dwaz 2015-08-10 19:34:29

8

接受的答案是不,我不認爲很正確,你需要處理字符串後調用addPercentEscapesAndReplaceAmpersand

+ (NSString *) addPercentEscapesAndReplaceAmpersand: (NSString *) stringToEncode 
{ 
    NSString *encodedString = [stringToEncode stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
    return [encodedString stringByReplacingOccurrencesOfString: @"&" withString: @"%26"]; 
} 
+4

是的,但會破壞押韻! – lol 2012-01-04 05:07:55

+2

這是不對的或者如果你建立一個查詢字符串樣的?富=酒吧和酒吧= foo和然後替換所有的&s的26%,這不是一個有效的查詢字符串了。 – 2012-01-12 01:50:09

+4

你將要處理的酒吧和Foo值,而不是整個查詢字符串。 – s1mm0t 2012-01-12 14:43:00