Nelson 寫些 iOS 開發的東東

正確的 encode URL

| Comments

有的時候,我們需要將 URL encode,在 iOS 底下有這個函式可以使用

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

可是這個函式 有個 bug,所以若是它不能符合你的需求,那就得自己處理啦。

如果你有使用 Nimbus 的話,在 NSString+NimbusCore.h 裡頭有個 - (NSString *)stringByAddingPercentEscapesForURLParameter 可以幫忙正確將 URL 做 UTF8 Encoding。如果你沒有用 Nimbus,那就只好自己寫一個啦,底下的程式碼是從 NSString+NimbusCore.m 複製過來的。

/**
 * Returns a string that has been escaped for use as a URL parameter.
 */
- (NSString *)stringByAddingPercentEscapesForURLParameter {
  
  CFStringRef buffer = 
  CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                          (__bridge CFStringRef)self,
                                          NULL,
                                          (__bridge CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                          kCFStringEncodingUTF8);
  
  NSString *result = [NSString stringWithString:(__bridge NSString *)buffer];
  
  CFRelease(buffer);
  
  return result;
}

Comments

comments powered by Disqus