iOSにおけるHTTPリクエストURLのトランスコード

1029 ワード

iOSでは、HTTPリクエストを使用してURLを処理する必要があります.
いくつかの特殊な文字があって、HTTPの要求を送る時、トランスコードを行う必要があって、主にパラメータの中の特殊な文字です:
!*'();:@&=+$,/?%#[]

トランスコード
- (NSString *)URLEncode:(NSString *)string {
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)string,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8));
    return encodedString;
}

デコード
- (NSString *)URLDecode:(NSString *)string {
    NSString *decodedString = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)url, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

完全なurl
完全なurlの場合、次の文を使用してトランスコードすることができます.
url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];