iOS Url特殊符号编码问题

开发中曾遇到棘手无法解决的问题,当时传输参数给后台,后台总是解析失败。问题一直未解,最后还是换了其它方法曲线解困了。现在觉得应该是这个问题,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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 3,156评论 4 97
  • 本博客转自:「作者:若愚链接:https://zhuanlan.zhihu.com/p/22361337来源:知乎...
    韩宝亿阅读 2,798评论 0 3
  • 难点:精准勾线的能力 1.起稿 从上到下,注意比例 2.上色 先用浅粉色和浅紫色上花的底色,然后再用深粉色勾画的脉...
    孟汐阅读 1,032评论 9 29
  • 我站在水晶球里的城堡门口 任由雪花落在身上 你喜欢看雪花落在我身上的样子 我喜欢看你看我的样子 当一切静止下来的时...
    长马阅读 356评论 0 7