iOS 字符串含有特殊字符,轉換URL為空值


 
網略請求的url含有特殊字符時字符串需要編碼處理
比如:url:http://demo.demo.com/demo?{userToken:xxxxxx}等等,都需要字符串處理,否則轉換成NSURL可能為空值。
 

第一種方法

url含有中文的解決方法

 NSString * encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlStr,NULL,NULL,kCFStringEncodingUTF8));

urlStr是url地址,拼接中含有中文。

 

第二種方法

// 在對URL中的中文進行轉碼時,iOS 9之前我們使用
 [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//編碼
// iOS 9之后使用  
 [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];//編碼
 
URLQueryAllowedCharacterSet組件是可選的
編碼字符范圍
URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

解碼:[@"編碼后的字符串" stringByRemovingPercentEncoding];//解碼


NSURL 轉換字符串可以直接使用NSURL的屬性absoluteString
例如上述的url,NSString * urlStr = url.absoluteString;

 

使用上面的方法無效,解決方法使用這個

//urlEncode編碼

NSString *charactersToEscape = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";

NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];

NSString * stringUrl = [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];

//urlEncode解碼

NSMutableString *outputStr = [NSMutableString stringWithString:input];

[outputStr replaceOccurrencesOfString:@"+" withString:@"" options:NSLiteralSearch range:NSMakeRange(0,[outputStr length])];

[outputStr stringByRemovingPercentEncoding];

 

    

 

 

參考:https://www.jianshu.com/p/b7dde2b1e992

   http://blog.csdn.net/olive1993/article/details/52036755

   https://www.tpyyes.com/a/kuozhan/2017/0406/89.html

 


免責聲明!

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



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