开发中曾遇到棘手无法解决的问题,当时传输参数给后台,后台总是解析失败。问题一直未解,最后还是换了其它方法曲线解困了。现在觉得应该是这个问题,url中带了&这个特殊符号,单单使用encodeBase64、decodeBase64不行,还要使用encodeToPercentEscapeString这个处理一下。encodeBase64、decodeBase64对汉字和空格进行编码,但不对特殊符号(&等)编码。
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;
}
网友评论