【作者前言】:13年入圈,分享些本人工作中遇到的點點滴滴那些事兒,17年剛開始寫博客,高手勿噴!以分享交流為主,歡迎各路豪杰點評改進!
1.應用場景:
鏈接分享場景非常之多,為了更好的保護一些數(shù)據(jù)信息,需要我們進行一些編解碼處理
這里為了能夠跟Web互通,整理了一下。
2.實現(xiàn)目標:
跨平臺url數(shù)據(jù)編解碼互通, 保護數(shù)據(jù)信息安全性
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;
}