[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) {
|
NSString * AFURLEncodedStringFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
|
||||||
static NSString * const kAFLegalCharactersToBeEscaped = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\|~ ";
|
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) {
|
NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding encoding) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue