iOS 学习 --- URLEncode和URLDecode

在iOS中,访问一些HTTP/HTTPS请求时,如果url中存在中文或者特殊字符,会导致无法正常的访问到资源或服务,例如加号会变成空格,想要解决这个问题,需要对url进行编码。

下面方法中用到的 @"!*'();:@&;=+$,/?%#[] " ,用户可自定义,代表的意思是需要对这些特殊字符进行转码。

方法一 ios(2.0,9.0)

//URLEncode
- (NSString *)URLEncode{
    
    // CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
    // CharactersToLeaveUnescaped = @"[].";
    
    NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)self,
                                                              NULL,
                                                              CFSTR("!*'();:@&;=+$,/?%#[] "),
                                                              kCFStringEncodingUTF8));
    return [result stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
//URLDEcode
- (NSString *)URLDecode{
    NSMutableString *outputStr = [NSMutableString stringWithString:self];    
    [outputStr replaceOccurrencesOfString:@"+" withString:@" " options:NSLiteralSearch range:NSMakeRange(0,[outputStr length])];    
    return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
//URLDEcode
- (NSString *)URLDecode{
 
    NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                                                                                     (__bridge CFStringRef)encodedString,
                                                                                                                     CFSTR(""),
                                                                                                                     CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

方法二 ios(7.0)

//URLEncode
- (NSString *)URLEncode{    
    NSString *encodedUrl = [self stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    return encodedUrl;
}

NSCharacterSet`系统内置的一些返回CharacterSet 的方法

- URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
- URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
- URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
- URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
- URLQueryAllowedCharacterSet     "#%<>[\]^`{|}      
- URLUserAllowedCharacterSet      "#%/:<>?@[\]^` 

意思是这些字符需要按照URL的规则被以%开头的编码替换,如果某个字符不想被替换,则不要写在""之间即可。
//URLDEcode
- (NSString *)URLDecode{
   return [self stringByRemovingPercentEncoding];
}

方法三 ios(7.0)

//URLEncode
- (NSString *)URLEncode{    
    NSString *charactersToEscape = @"!*'();:@&;=+$,/?%#[] ";
    NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
    NSString *encodedUrl = [self stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
    return encodedUrl;
}
//URLDEcode
- (NSString *)URLDecode{
   return [self stringByRemovingPercentEncoding];
}

相关文章

iOS中URL编码那些事

在线URL编码解码

猜你喜欢

转载自blog.csdn.net/jiaxin_1105/article/details/115867858
今日推荐