iOS 开发 url编解码_encodeURIComponent

2022-03-10  本文已影响0人  iOS_PM_WEB_尛鹏

【作者前言】:13年入圈,分享些本人工作中遇到的点点滴滴那些事儿,17年刚开始写博客,高手勿喷!以分享交流为主,欢迎各路豪杰点评改进!

1.应用场景:

链接分享场景非常之多,为了更好的保护一些数据信息,需要我们进行一些编解码处理
这里为了能够跟Web互通,整理了一下。

2.实现目标:

跨平台url数据编解码互通, 保护数据信息安全性

3.代码说明:

① url encodeURIComponent 编码

//MARK: - encodeURIComponent: 
/**
* @brief url编码处理
* @param urlStr - 待编码的链接字符串
* @return 编码完成后的链接字符串
*/
+ (NSString *)yp_encodeURIComponent:(NSString *)urlStr{
    NSString *encodedUrl = nil;
    if (@available(iOS 9.0, *)) {
        NSMutableCharacterSet *set = [NSMutableCharacterSet new];
        [set formUnionWithCharacterSet:([NSMutableCharacterSet alphanumericCharacterSet])];
        [set formUnionWithCharacterSet:([NSMutableCharacterSet characterSetWithCharactersInString:@"-_.!~*'()"])];
        encodedUrl = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:set];
    }else {
        encodedUrl = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlStr, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8));
    }
    
    return encodedUrl;
}

② URL decodeURIComponent 解码

//MARK: - decodeURIComponent: 
/**
* @brief url 解码处理
* @param urlStr - 待解码的链接字符串
* @return 解码完成后的链接字符串
*/
+ (NSString *)yp_decodeURIComponent:(NSString *)urlStr {
    NSString *decodedUrl = nil;
    if (@available(iOS 9.0, *)) {// 当前版本 >= 9.0 可用
        decodedUrl = [urlStr stringByRemovingPercentEncoding];
    }else {
        decodedUrl = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (__bridge CFStringRef)urlStr, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    }
    
    return decodedUrl;
}
上一篇下一篇

猜你喜欢

热点阅读