美文网首页杏仁丶的iOS学习专题
iOS Url特殊符号编码问题

iOS Url特殊符号编码问题

作者: _浅墨_ | 来源:发表于2015-11-02 10:08 被阅读842次

    开发中曾遇到棘手无法解决的问题,当时传输参数给后台,后台总是解析失败。问题一直未解,最后还是换了其它方法曲线解困了。现在觉得应该是这个问题,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;
    }
    

    相关文章

      网友评论

        本文标题:iOS Url特殊符号编码问题

        本文链接:https://www.haomeiwen.com/subject/kerqhttx.html