Skip to content

Commit

Permalink
URLEncode use the new method stringByAddingPercentEncodingWithAllowed…
Browse files Browse the repository at this point in the history
…Characters
  • Loading branch information
ElfSundae committed Apr 28, 2016
1 parent 18c4928 commit 2de7e9b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
8 changes: 6 additions & 2 deletions ESFramework/Core/Additions/NSString+ESAdditions.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,16 @@
///=============================================

/**
* Add percent escapes for characters for @":/?#[]@!$&'()*+,;="
* Returns a string in which all non-alphanumeric characters except -_.~ have been replaced
* with a percent (%) sign followed by two hex digits,
* it conforms to [RFC 3986](http://www.faqs.org/rfcs/rfc3986.html)
*/
- (NSString *)URLEncode;

/**
* Replaces "+" to " ", then calls `-stringByReplacingPercentEscapesUsingEncoding:`
* Decodes URL-encoded string.
*
* Decodes any %## encoding in the given string. Plus symbols ('+') are decoded to a space character.
*/
- (NSString *)URLDecode;

Expand Down
30 changes: 26 additions & 4 deletions ESFramework/Core/Additions/NSString+ESAdditions.m
Original file line number Diff line number Diff line change
Expand Up @@ -102,16 +102,38 @@ - (NSArray *)splitWithCharacterSet:(NSCharacterSet *)separator
return [self componentsSeparatedByCharactersInSet:separator];
}

static NSString *const kESCharactersToBeEscaped = @":/?#[]@!$&'()*+,;=";
- (NSString *)URLEncode
{
CFStringRef encoded = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)self, NULL, (__bridge CFStringRef)kESCharactersToBeEscaped, kCFStringEncodingUTF8);
return CFBridgingRelease(encoded);
if ([self respondsToSelector:@selector(stringByAddingPercentEncodingWithAllowedCharacters:)]) {
static NSCharacterSet *__allowedCharacters = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSMutableCharacterSet *charset = [NSMutableCharacterSet alphanumericCharacterSet];
[charset addCharactersInString:@"-_.~"];
__allowedCharacters = [charset copy];
});
return [self stringByAddingPercentEncodingWithAllowedCharacters:__allowedCharacters];
} else {
static NSString *const __charactersToBeEscaped = @":/?#[]@!$&'()*+,;=";
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
CFStringRef encoded = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)self, NULL, (__bridge CFStringRef)__charactersToBeEscaped, kCFStringEncodingUTF8);
#pragma clang diagnostic pop
return CFBridgingRelease(encoded);
}
}

- (NSString *)URLDecode
{
NSString *decoded = [self stringByReplacingOccurrencesOfString:@"+" withString:@" "];
return [decoded stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if ([decoded respondsToSelector:@selector(stringByRemovingPercentEncoding)]) {
return [decoded stringByRemovingPercentEncoding];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
return [decoded stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
#pragma clang diagnostic pop
}
}

- (NSDictionary *)queryDictionary
Expand Down

0 comments on commit 2de7e9b

Please sign in to comment.