NSString方法转换百分比'&'用于URL

时间:2010-01-29 01:37:41

标签: cocoa-touch encoding nsstring

哪种NSString编码方法将百分比(& )字符正确地转换为%26

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

获取空格(%20)和其他坏人但忽略了&符号!?!

3 个答案:

答案 0 :(得分:43)

该方法不会处理&符号,因为它们是URL中的合法字符。在这次电话会议之前,您应该可以预先处理特别有问题的作品。

答案 1 :(得分:23)

这是从Bagonca blog对你的NSStrings进行url编码的问题的一个很好的解决方案:

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

为ARC兼容性添加CFBridgingRelease(

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

答案 2 :(得分:8)

接受的答案不太正确我不认为,你需要处理字符串 后调用addPercentEscapesAndReplaceAmpersand

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