iOS Url特殊符號編碼問題
阿新 • • 發佈:2019-01-23
開發中曾遇到棘手無法解決的問題,當時傳輸引數給後臺,後臺總是解析失敗。問題一直未解,最後還是換了其它方法曲線解困了。現在覺得應該是這個問題,url中帶了&這個特殊符號,單單使用encodeBase64、decodeBase64不行,還要使用encodeToPercentEscapeString這個處理一下。
url中是key value鍵值對,根據&進行分割多個key value,所以如果url像這樣
@”http://127.0.0.1/php/login.php?username=chang&123&password=admin“,
使用者名稱解析的是username為chang而不是chang&123。使用encodeToPercentEscapeString處理後,不會出現這樣問題。
//base64編碼 "加密"--- 可以把任意的二進位制資料 轉化成字串 方便在網路上傳輸
- (NSString *)encodeBase64:(NSString *)str{
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
return [data base64EncodedStringWithOptions:0];
}
//base64解碼 "解密"
- (NSString *)decodeBase64:(NSString *)base64Str{
NSData *data = [[NSData alloc] initWithBase64EncodedString:base64Str options:0];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
//進行url編碼 (但是不對漢字和空格進行編碼)
- (NSString *)encodeToPercentEscapeString: (NSString *) input
{
NSString *outputStr = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)input,NULL ,(CFStringRef)@"!*'();:@&=+ $,/?%#[]",kCFStringEncodingUTF8));
return outputStr;
}