[Issue #209] Adding conditional in AFURLEncodedStringFromStringWithEncoding to correctly handle cases where '%' is passed in literally, and not interpreted as an escape sequence, which would have previously caused the subsequent string to be nil.
This commit is contained in:
parent
06d1b3a400
commit
ad27bd0397
1 changed files with 9 additions and 2 deletions
|
|
@ -98,8 +98,15 @@ static NSString * AFBase64EncodedStringFromString(NSString *string) {
|
|||
NSString * AFURLEncodedStringFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
|
||||
static NSString * const kAFLegalCharactersToBeEscaped = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\|~ ";
|
||||
|
||||
// Following the suggestion in documentation for `CFURLCreateStringByAddingPercentEscapes` to "pre-process" URL strings (using stringByReplacingPercentEscapesUsingEncoding) with unpredictable sequences that may already contain percent escapes.
|
||||
return [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)[string stringByReplacingPercentEscapesUsingEncoding:encoding], NULL, (CFStringRef)kAFLegalCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding)) autorelease];
|
||||
/*
|
||||
The documentation for `CFURLCreateStringByAddingPercentEscapes` suggests that one should "pre-process" URL strings with unpredictable sequences that may already contain percent escapes. However, if the string contains an unescaped sequence with '%' appearing without an escape code (such as when representing percentages like "42%"), `stringByReplacingPercentEscapesUsingEncoding` will return `nil`. Thus, the string is only unescaped if there are no invalid percent-escaped sequences.
|
||||
*/
|
||||
NSString *unescapedString = [string stringByReplacingPercentEscapesUsingEncoding:encoding];
|
||||
if (unescapedString) {
|
||||
string = unescapedString;
|
||||
}
|
||||
|
||||
return [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, (CFStringRef)kAFLegalCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding)) autorelease];
|
||||
}
|
||||
|
||||
NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding encoding) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue