NSString method to percent escape '&' for URL

前提是你 提交于 2019-12-17 16:44:27

问题


Which NSString encoding method will percent escape the ampersand (&) character correctly into %26?

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

gets the spaces (%20) and other baddies but ignores ampersands!?!


回答1:


Ampersands won't be processed by that method because they're legal characters in a URL. You should probably pre-process particularly problematic pieces, piecemeal, prior to this call.




回答2:


Here is a nice solution to this problem taken from Bagonca blog to url-encode your NSStrings :

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

Add CFBridgingRelease( for ARC compatibility.

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



回答3:


The accepted answer isn't quite right I don't think, you need to process the string after calling addPercentEscapesAndReplaceAmpersand

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


来源:https://stackoverflow.com/questions/2159341/nsstring-method-to-percent-escape-for-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!