Cocoa touch NSString方法用于百分比转义'&';用于URL

Cocoa touch NSString方法用于百分比转义'&';用于URL,cocoa-touch,encoding,nsstring,Cocoa Touch,Encoding,Nsstring,哪种NSString编码方法可以将符号(&)字符正确转义为%26 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 获取空格(%20)和其他坏蛋,但忽略符号 该方法不会处理符号,因为它们是URL中的合法字符。在此调用之前,您可能应该预先处理一些特别有问题的片段,这些片段都是零碎的。这里有一个很好的解决方案,可以从url对NSString进行编码: + (NSString *)urlEncodeValue:(NSStri

哪种NSString编码方法可以将符号(&)字符正确转义为
%26

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

获取空格(%20)和其他坏蛋,但忽略符号

该方法不会处理符号,因为它们是URL中的合法字符。在此调用之前,您可能应该预先处理一些特别有问题的片段,这些片段都是零碎的。

这里有一个很好的解决方案,可以从url对NSString进行编码:

+ (NSString *)urlEncodeValue:(NSString *)str
{
   NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
   return [result autorelease];
}
添加
CfBrigingRelease(
)以实现ARC兼容性

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

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

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

符号在URL中是一个有效字符。
www.example.com?a=5&b=7
我知道。但是它弄乱了我的查询参数,所以需要“删除”在添加到查询字符串之前出现的值中的(&I)。是的,但这会破坏头韵!如果您生成一个查询字符串,如?foo=bar&bar=foo,然后将所有&s替换为%26,则它不再是有效的查询字符串。您可能希望处理bar和foo值,而不是整个查询字符串。此解决方案d我的问题。很难找到答案,因为我不知道原因是我的帖子正文中的字符。这似乎是由于我的文件的大小。如果您正在发送sendAsynchronousRequest,并且该请求终止了负载,请检查编码。谢谢。