iOS HTTP请求 URL中含有特殊字符处理

2019-03-22  本文已影响0人  轻花逐风

iOS HTTP请求 URL中含有特殊字符  !$&'()*+,;=  处理

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。

解决办法:

对参数做编码,代码如下:

-(NSString*)encodeUrlParam

{

    static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@"; // does not include "?" or "/" due to RFC 3986 - Section 3.4

    staticNSString*constkAFCharactersSubDelimitersToEncode =@"!$&'()*+,;=";

    NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];

    [allowedCharacterSetremoveCharactersInString:[kAFCharactersGeneralDelimitersToEncodestringByAppendingString:kAFCharactersSubDelimitersToEncode]];

    // FIXME: https://github.com/AFNetworking/AFNetworking/pull/3028

    // return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];

    staticNSUIntegerconstbatchSize =50;

    NSUIntegerindex =0;

    NSMutableString*escaped =@"".mutableCopy;

    while(index

#pragma GCC diagnostic push

#pragma GCC diagnostic ignored"-Wgnu"

        NSUIntegerlength =MIN(self.length - index, batchSize);

#pragma GCC diagnostic pop

        NSRangerange =NSMakeRange(index, length);

       range = [self rangeOfComposedCharacterSequencesForRange:range];

        NSString*substring = [selfsubstringWithRange:range];

        NSString*encoded = [substringstringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];

        [escapedappendString:encoded];

        index += range.length;

    }

    returnescaped;

}


上一篇 下一篇

猜你喜欢

热点阅读