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

Mel*_*emi 10 encoding cocoa-touch nsstring

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

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*ieb 43

Ampersands不会被该方法处理,因为它们是URL中的合法字符.在此调用之前,您应该可以预先处理特别有问题的碎片.


Tho*_*ert 23

以下是从Bagonca博客中对您的NSStrings进行url编码的问题的一个很好的解决方案:

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

添加CFBridgingRelease(ARC兼容性.

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


s1m*_*m0t 8

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

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

  • 是啊但这会破坏头韵! (4认同)
  • 您可能希望处理bar和foo值而不是整个查询字符串. (4认同)
  • 如果您构建一个类似?foo = bar&bar = foo的查询字符串,然后将所有&s替换为%26,那么这是不对的,它不再是一个有效的查询字符串. (2认同)