美文网首页
iOS 字符串含有特殊字符,转换URL为空值

iOS 字符串含有特殊字符,转换URL为空值

作者: 余鹤龄 | 来源:发表于2020-09-16 09:56 被阅读0次

    网络请求的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];

    相关文章

      网友评论

          本文标题:iOS 字符串含有特殊字符,转换URL为空值

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