url進行轉義


轉義
iOS9之前使用 CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding)這個方法
 
參數解釋
allocator 表示為返回字符串的申請的內存,一般為null或kCFAllocatorDefault
originalString 表示需要轉義的字符串
charactersToLeaveUnescaped 表示需要保留哪些字符不需要轉義
legalURLCharactersToBeEscaped 表示需要轉義的字符
encoding 表示需要轉義的風格
 
ios 9之后使用 - (nullable NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters 方法
allowedCharacters 系統給了六種默認的風格
URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet    "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`
這些只是對`#%^{}[]|\"<> 加空格共14個字符編碼,不包括”&?”等符號,如果想要對“&?”進行編碼就需要自己定義編碼方式
例如:
NSCharacterSet *customAllowedSet = [[NSCharacterSet characterSetWithCharactersInString:@"!#$%&'()*+,/:;=?@[]"] invertedSet];
 
具體使用:
+ (NSString*)encodeString:(NSString*)unencodedString {
   
    if([[[UIDevice currentDevice]systemVersion]floatValue] >=9.0) {
       
        NSCharacterSet *customAllowedSet = [[NSCharacterSet characterSetWithCharactersInString:@"!#$%&'()*+,/:;=?@[]"] invertedSet];
      NSString *encodeUrl = [unencodedString stringByAddingPercentEncodingWithAllowedCharacters:customAllowedSet];
        return encodeUrl;
       
    }
   
    NSString*encodedString = (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)unencodedString,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8));
   
    return encodedString;
}
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM